maven打包-build plugin筆記
阿新 • • 發佈:2022-12-05
背景
有一個模組打包的時候,發現打出的jar 包特別小,顯然是沒有把相關依賴的 resources, 依賴的 jar 包打進去,只打了原始碼。
找了一圈,因為對 maven 不太熟悉,也不知道為何。只知道,僅此一個模組有問題,並且最近也沒有任何的調整(後來發現,沒發現問題,只是這個模組很久沒有動過,沒有重新打包,才沒有發現問題。但問題出現的原因,是因為一次專案結構調整,做了相對大的改動,然後測試時,漏掉了這個沒人管的模組,以至於一直沒有發現)
好,背景講完。
怎樣解決這個問題呢,
直接說結論吧:
這個模組的結構大概是這樣子的:
content-server
--content-api
----src
----pom.xml
--content-service
----src
----pom.xml
然後呢,這兩個pom都只做了必要的依賴,沒有任何關於 build 的外掛依賴。
解決方案:
在 content-service 的pom.xml 加入 build 的依賴外掛。。。詳情如程式碼片段。
(再囉嗦幾句,好像只引入 <build> 部分,也能正常打包,即不用 <profiles> 也行啊。。。emmmm, 這次先記錄一下,下次如果再出問題再深入研究一下吧。。。)
<project> <!-- 一些依賴部分..... 省略 --> <!-- build 部分 和 <profiles> 部分放在這個 pom.xml 的後面即可 --> <!-- 雖然只用 build部分的外掛也可以打好包,但下面的 profile 寫法,控制感覺更精準一些 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>${start-class}</mainClass> <outputDirectory>${project.release.directory}</outputDirectory> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <!-- 拷貝外掛 --> <executions> <execution> <id>copy</id> <phase>package</phase><!-- maven生命週期 --> <configuration> <tasks> <!-- 其他語法自行百度maven-antrun-plugin外掛的相關用法 --> <copy todir="${project.outputDirectory}"> <!-- 檔案將要輸出目錄 在parent pom中統一配置,此處引用即可 --> <fileset dir="${project.build.directory}"> <!-- 待拷貝檔案的目錄,預設目錄在專案的target下 --> <include name="*.jar" /> <!-- 待拷貝檔案,可以使用下面的萬用字元,還可以是其他目錄的檔案。此處需要與project.build.finalName對應,否則可能找不到檔案 --> </fileset> </copy> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>${start-class}</mainClass> <fork>true</fork> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>pipeline</id> <activation> <activeByDefault>false</activeByDefault> </activation> <build> <finalName>${project.artifactId}-${revision}</finalName> <resources> <resource> <!-- Filter for version name in properties --> <directory>src/main/deploy</directory> <filtering>true</filtering> <includes> <include>app.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>app.properties</exclude> <exclude>*.yml</exclude> <exclude>releaseNotes.md</exclude> </excludes> </resource> <resource> <directory>src/main/deploy</directory> <includes> <include>*.yml</include> </includes> </resource> </resources> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>copy-resources</id> <!-- here the phase you need --> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target</outputDirectory> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>releaseNotes.md</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>${start-class}</mainClass> <fork>true</fork> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>