溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

maven多模塊項(xiàng)目怎么對外輸出為一個構(gòu)件

發(fā)布時間:2021-12-14 14:40:41 來源:億速云 閱讀:183 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“maven多模塊項(xiàng)目怎么對外輸出為一個構(gòu)件”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

臺式機(jī)生產(chǎn)線我的maven代碼工程 xxx
顯示器xxx-web
主機(jī)xxx-app
鍵盤xxx-domian
鼠標(biāo)xxx-infrastration
臺式機(jī)xxx-all.jar 

雖然不能完全對應(yīng)的上,我拿開源的dubbo描述一下我的問題。

dubbo開發(fā)者: dubbo的開源項(xiàng)目采用maven多模塊開發(fā)的,內(nèi)部模塊分的非常細(xì)。

充分利用了臺式電腦的分模塊設(shè)計(jì)思想。

maven多模塊項(xiàng)目怎么對外輸出為一個構(gòu)件

dubbo使用者: 我只需要引入一個dubbo-all的依賴即可使用dubbo;

好比臺式機(jī)的用戶,我只需要一個可使用的臺式機(jī),按照使用手冊來即可,內(nèi)部的東西我不想知道;

只需要引入坐標(biāo):

 <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
   		<version>2.7.0</version>
      <optional>true</optional>
    </dependency>

背景

最近的業(yè)務(wù)開發(fā)工作碰到過一個類似的問題。

問題回答
where are we?現(xiàn)狀公共組件程序員開發(fā)采用多模塊開發(fā)一個組件,業(yè)務(wù)程序員希望只引用一個組件
where are we go?目的多模塊開發(fā)一個公共組件,業(yè)務(wù)項(xiàng)目只需要引入一個模塊
how we go there?實(shí)現(xiàn)路徑maven-shade-plugin

實(shí)現(xiàn)路徑

shade

shade提供了一個把你的maven多模塊構(gòu)件和構(gòu)件的依賴打包為一個超級jar包的能力。

它綁定到了maven生命周期的package階段,提供了唯一的mavn的goal指令shade:shade

它的系統(tǒng)運(yùn)行環(huán)境要求是:

運(yùn)行需求說明
maven3最低maven3
jdk7最低jdk7
內(nèi)存和磁盤無最低空間需求

用法如下:

<project>
 <build>
  <!-- To define the plugin version in your parent POM -->
  <pluginManagement>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
     <version>3.2.4</version>
    </plugin>
   </plugins>
  </pluginManagement>
  <!-- To use the plugin goals in your POM or parent POM -->
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version><configuration>
     <!-- put your configurations here -->
    </configuration>
    <executions>
     <execution>
      <phase>package</phase>
      <goals>
       <goal>shade</goal>
      </goals>
     </execution>
    </executions>
   </plugin>
  </plugins>
 </build>

常見配置屬性:

ApacheLicenseResourceTransformer

防止證書重復(fù)

ApacheNoticeResourceTransformer

準(zhǔn)備合并通知

AppendingTransformer

作為資源添加

ComponentsXmlResourceTransformer

聚合components.xml 從

DontIncludeResourceTransformer

排除資源文件

IncludeResourceTransformer

包含的資源文件

ManifestResourceTransformer

manifest的條目

ServicesResourceTransformer

合并meta-info/services 資源

XmlAppendingTransformer

添加xml內(nèi)容作為一個xml資源

dubbo

主要看dubbo-all模塊的配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-parent</artifactId>
        <version>${revision}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <artifactId>dubbo</artifactId>
    <packaging>jar</packaging>
    <name>dubbo-all</name>
    <description>The all in one project of dubbo</description>
    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-config-api</artifactId>
            <version>${project.version}</version>
            <scope>compile</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createSourcesJar>true</createSourcesJar>
                            <promoteTransitiveDependencies>false</promoteTransitiveDependencies>
                            <artifactSet>
                                <includes>
                                    <include>com.alibaba:hessian-lite</include>
																		<include>org.apache.dubbo:dubbo-config-api</include>
                                </includes>
                            </artifactSet>
                            <transformers>
                                <!-- dubbo-common beginning -->
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>
                                        META-INF/dubbo/internal/org.apache.dubbo.common.compiler.Compiler
                                    </resource>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>
                                        META-INF/dubbo/internal/org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory
                                    </resource>
                                </transformer>
                            </transformers>
                            <filters>
                                <filter>
                                    <artifact>org.apache.dubbo:dubbo</artifact>
                                    <excludes>
                                        <!-- These two line is optional, it can remove some warn log -->
                                        <exclude>com/**</exclude>
                                        <exclude>org/**</exclude>
                                        <!-- This one is required -->
                                        <exclude>META-INF/dubbo/**</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

為控制代碼占用太多內(nèi)容,上面貼的pom配置為刪除了大量相同或者類似的節(jié)點(diǎn)。 下面拆解一下它的結(jié)構(gòu):

核心節(jié)點(diǎn)說明
dependency直接依賴,即包含的當(dāng)前工程中的模塊
pluginshade

shade的核心配置

配置說明(見名知意,先猜測)
phase掛接在maven的生命周期的package階段
goal提供唯一的goal指令 shade
createSourcesJar是否創(chuàng)建源碼到j(luò)ar包中,方便ide直接查看到源碼
promoteTransitiveDependencies是否打包間接依賴
artifactSet-includes-include包含的子模塊或者排除的子模塊
 transformers-transformer-resource轉(zhuǎn)換器配置
excludes>-filter過濾器中排出某些文件

具體看上面的代碼。

“maven多模塊項(xiàng)目怎么對外輸出為一個構(gòu)件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI