各种Maven打包
1、引言
目前遇到了Maven打包的问题,这玩意不用记,每次网上查一下就可以,但是网上的答案大都是模棱两可,要不就是细节不清楚,并且不同的Maven打包需求不一样,有时候需要打可运行jar包;有时候需要打Source jar包;有时候需要将公共模块抽取出来打成jar包,并不需要运行,提供给别人引用等等,查找实在浪费时间,所以就自己验证整理一份,方便后续查看。
2、利用Spring Boot Mavn插件打可运行jar
这种需求非常常见,因为有时候我们开发的项目是以jar的形式部署到服务器运行,IDEA中自带的Maven插件就支持打jar包,步骤如下:
1、在需要打包的模块的pom文件引入插件
注意:不引入这个插件会导致打成的jar包运行时报错:xxxx.jar中没有主清单属性。需要如下指定插件版本和<executions>标签
<build> <!--指定jar包名称--> <finalName>test</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
2、点击IDEA右侧的Maven工具执行打包即可,如下图,双击package
3、此时在Target目录下找到jar,放到服务器上java -jar xxxx.jar运行即可。
3、手动选择Main Class的方式打可运行jar包
Idea的File->Project Structure->Artifacets,如下图:
选择需要打包的模块,选择Main Class,其他的可以选择默认选项。
注意:这种方式适合多模块的打包,如果是整体打包,打出的jar包运行会有问题,错误提示和解决放入参考如下:https://ask.csdn.net/questions/7618126
本人并没有测试链接中的方法是否可行,而是直接重新创建了一个模块,将代码迁移后打包的,暂未找到更好的方法。
开始Build,步骤如下:
点击Build后,项目目录下会生成一个out目录,out目录里面就是打包好的jar,如下图:
取出对应的jar包放到服务器上运行即可。
4、打Source JAR包(jar里面是.java文件,不是编译后的.class文件)
要打包的module的pom文件下引入如下插件:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <!--插件版本自行指定--> <version>2.4</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
重新引入后刷新Maven插件,可以看到多了一个source插件,如下图:
双击install,可以将打成的普通jar和source jar发布到本地的Maven仓库,如下图:
上面的瘦jar包没有下载依赖的jar包,只有pom依赖,可以给其他工程从外部引入。
5、引入外部lib包后打可运行jar包
有时候开发时会用到第三方提供的jar包,不是通过Maven引入进来,属于系统级jar包,需要指定jar的本地访问路径,此时的引入和打包方式和一般项目不同。
5.1、引入方式
首先需要在项目的第二级创建lib文件夹,将第三方jar包引入其中,如图:
然后在需要引入当前jar的模块pom文件中依赖,groupId和artifactId以及版本都是自定义,主要是指定<scope>为system,并指定java的本地路径,代码如下:
<dependencies> <dependency> <groupId>xxx.xxx</groupId> <artifactId>xxxx</artifactId> <version>1.0-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/../lib/xxxx-1.0-SNAPSHOT.jar</systemPath> </dependency> </dependencies>
5.2、打包方式
打包和其他的Spring Boot Maven插件打包一样,双击Package即可,但是需要注意在模块pom文件中增加如下配置:
<configuration> <includeSystemScope>true</includeSystemScope> </configuration>
完成的打包插件代码如下:
<build> <!--指定jar包名称--> <finalName>test</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <!--打包时包含外部jar包--> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?