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>