maven pom 配置 学习笔记(五)之 maven-jar-plugin
maven-jar-plugin 这个插件通常用法是将maven工程打成 jar 包,但是还有其它用法。
1、生成可执行 jar 包
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest>
<!--是否要把第三方jar放到manifest的classpath中-->
<addClasspath>true</addClasspath>
<!--生成的manifest中classpath的前缀,
因为要把第三方jar放到lib目录下,
所以classpath的前缀是lib/--> <classpathPrefix>lib/</classpathPrefix>
<!-- 执行的主程序路径 --> <mainClass>com.example.demo.test.App</mainClass> </manifest> </archive> </configuration> </plugin>
打包出来的包的数据结构如下:
打开 MENIFEST.MF 文件可以看到如下内容:
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: sandy Class-Path: lib/gson-2.8.5.jar lib/guava-19.0.jar lib/slf4j-api-1.7.25 .jar lib/logback-core-1.2.3.jar lib/logback-access-1.2.3.jar lib/logb ack-classic-1.2.3.jar lib/lombok-1.18.2.jar lib/commons-lang3-3.8.1.j ar lib/commons-io-2.2.jar //表示依赖的第三方jar包在哪里,显然需要放在和 当前jar包同级目录下的 lib文件夹下 Created-By: Apache Maven 3.5.2 Build-Jdk: 1.8.0_121 Main-Class: com.example.demo.test.App //表示运行的主程序
所以安装包的路径结构应该是:
为此需要 通过 maven-assembly-plugin 插件来组装出安装包。
针对本示例 对应的 maven-assembly-plugin 配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> <configuration> <descriptors> <descriptor>assembly.xml</descriptor> //和 pom.xml 同级目录下 </descriptors> <outputDirectory>output</outputDirectory> //和 pom.xml同级目录下,assembly 组装出来的包会被放置在output目录下 </configuration> </plugin>
assembly.xml 内容如下:
<?xml version='1.0' encoding='UTF-8'?> <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> <id>consul-consumer-demo</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}</directory> //${project.build.directory} 指 target目录 <outputDirectory>/</outputDirectory> //表示输出到 pom 中配置的 output目录下 <includes> <include>consul-product.jar</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}/classes</directory> <outputDirectory>/config</outputDirectory> //表示输出到 pom 中配置的 output/config 目录下 <includes> <include>application.properties</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}</directory> //${project.basedir} 指 工程根目录 <outputDirectory>/</outputDirectory> <includes> <include>script/*.*</include> </includes> </fileSet> </fileSets> </assembly>
或者配合 maven-dependency-plugin 插件进行使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase> package </phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <includeScope>compile</includeScope> </configuration> </execution> </executions> </plugin> |
打出来的lib 目录直接 和 本工程的jar包在同一级目录下。
2、打出来的 jar 包可以指定 jar名称
在不指定jar包名称的时候,通常见的jar包名称是:artifactId-version.jar
要自定义 jar 包名称,可以直接在 pom.xml 中 build 结点下设置 finalName,如:
<build> <finalName>p-test-tool</finalName> </build>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~