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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南