1. 程式人生 > 其它 >maven打包-build plugin筆記

maven打包-build plugin筆記

背景

有一個模組打包的時候,發現打出的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>