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>
posted @ 2022-12-05 15:07  aaacarrot  阅读(532)  评论(0编辑  收藏  举报