您好,登錄后才能下訂單哦!
本篇內(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ì)思想。
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 |
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-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)前工程中的模塊 |
plugin | shade |
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í)用文章!
免責(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)容。