您好,登錄后才能下訂單哦!
今天小編給大家分享一下springboot怎么結合maven實現多模塊打包的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
我們平時在開發系統時,一般我們的系統工程會被分為多個模塊,一個原因是方便協同開發,系統間解耦,另外一個很重要的原因是:別的系統需要依賴我們系統的部分功能,我們可能將這部分功能劃分到一個模塊里面,單獨打包提供給對方。現在我將通過一個示例工程來演示如何借助maven完成springboot應用的多模塊打包的操作。
要點:
1、工程存在多個模塊,模塊間有依賴關系
2、父工程維護工程的主版本號,子模塊直接引用父工程定義的版本號的變量
3、借助flatten-maven-plugin插件完成子模塊pom文件中引用的父工程變量的替換工作
test工程結構
test --test-api --src --main --pom.xml --test-core --src --main --java --resouce --test --pom.xml
其中test-api模塊為共用模塊,test-core模塊依賴test-api模塊。后續也會有其他系統依賴test-api模塊,因此需要將test-api模塊發布到maven私服。
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>test</artifactId> <version>${revision}</version> <packaging>pom</packaging> <modules> <module>test-api</module> <module>test-core</module> </modules> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <revision>1.0.0</revision> </properties> <!--發布到遠程倉庫的配置--> <distributionManagement> <repository> <id>releases</id> <name>releases</name> <url>http://192.168.1.1/repository/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://192.168.1.1/repository/snapshots/</url> </snapshotRepository> </distributionManagement> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>flatten-maven-plugin</artifactId> <version>1.4.1</version> <configuration> </configuration> <executions> <!-- enable flattening --> <execution> <id>flatten</id> <phase>process-resources</phase> <goals> <goal>flatten</goal> </goals> </execution> <!-- ensure proper cleanup --> <execution> <id>flatten.clean</id> <phase>clean</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
父模塊很重要的一個配置就是flatten-maven-plugin這個插件,用于打包時替換子模塊中pom文件的引用的父工程的變量,比如revision變量。如果不添加此插件,雖然打包時不會報錯,但是別的系統引用test-api.jar的時候,會出現類似Could not find artifact org.example:test:pom:${revision} in nexus-aliyun 的錯誤,主要原因就是子模塊中引用的父工程的變量未被替換導致的
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>test</artifactId> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>test-api</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> </dependencies> </project>
test-api模塊的pom文件指定父工程時,version參數用變量表示,方便對版本號的維護。后續升級系統的版本號,只需要修改父工程中的revision變量即可。打包時,子模塊pom文件中的revision會被替換成revision的真實值,此處打包后jar包里的pom文件的{revision}會被替換成revision的真實值,此處打包后jar包里的pom文件的revision會被替換成revision的真實值,此處打包后jar包里的pom文件的{revision}會被替換成1.0.0
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>test</artifactId> <version>${revision}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>test-core</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--跳過部署,執行deploy時不將本模塊部署到倉庫--> <maven.deploy.skip>true</maven.deploy.skip> </properties> <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>test-api</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
test-core模塊直接依賴test-api模塊,通過revison參數動態引用父工程中指定的版本號。將test−core打包后,test−core.jar包中的pom文件中的{revison}參數動態引用父工程中指定的版本號。將test-core打包后,test-core.jar包中的pom文件中的revison參數動態引用父工程中指定的版本號。將test−core打包后,test−core.jar包中的pom文件中的{revision}會被替換成revision參數的實際值1.0.0
(1)進入test工程根目錄,比如我所在工程根目錄路徑是D:\ideaProject\test,
若執行下述命令,
mvn clean install
test-api模塊和test-core模塊都會被打包進本地倉庫。
(2)如果執行下述命令,test-api模塊會被部署到遠程倉庫,而test-core模塊則不會被部署到遠程倉庫。
mvn clean deploy
(3)如果只想打包test-api模塊到本地倉庫,或者只想把test-api模塊部署到遠程倉庫,可以進入test-api模塊的主目錄,比如D:\ideaProject\test\test-api,執行下述命令
#只安裝到本地倉庫 mvn clean install #部署到遠程倉庫(該命令會先把包安裝到本地倉庫) mvn clean deploy
已test-api為例,打包后的test-api-1.00.jar文件中的pom.xml文件內容如下所示
<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>test-api</artifactId> <version>1.0.0</version> <licenses> <license> <name>Apache License, Version 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0</url> </license> </licenses> </project>
可以發現,里面引入的父工程的變量已經被成功替換。
以上就是“springboot怎么結合maven實現多模塊打包”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。