Maven打包生成包含所有依赖的jar包

本文介绍如何使用Maven插件生成包含所有依赖项的Jar包。通过配置maven-assembly-plugin,可以在项目的target目录下生成一个带有-jar-with-dependencies后缀的Jar包,该包内含项目所需的所有依赖项的Class文件。

 maven打包生成的普通jar包,只包含该工程下源码编译结果,不包含依赖内容。同时,maven提供以下方式生成包含所有依赖的jar文件,依赖以class的方式存在; 
将此plugin添加到pom文件中

             <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <!--这部分可有可无,加上的话则直接生成可运行jar包-->
                    <!--<archive>-->
                        <!--<manifest>-->
                            <!--<mainClass>${exec.mainClass}</mainClass>-->
                        <!--</manifest>-->
                    <!--</archive>-->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

如果出现CLASS重名的情况,这时候就要把最新的版本号添加进去即可,

2.在当前项目下执行mvn assembly:assembly, 执行成功后会在target文件夹下多出一个以-jar-with-dependencies结尾的JAR包. 这个JAR包就包含了项目所依赖的所有JAR的CLASS.

3.如果不希望依赖的JAR包变成CLASS的话,可以修改ASSEMBLY插件.

    • 找到assembly在本地的地址,一般是 
      c:/users/${your_login_name}/.m2/\org\apache\maven\plugins\maven-assembly-plugin\2.4
    • 用WINZIP或解压工具打开此目录下的maven-assembly-plugin-2.4.jar, 找到assemblies\jar-with-dependencies.xml
    • 把里面的UNPACK改成FALSE即可
<think>我们正在讨论使用maven-shade-plugin生成包含依赖jar(也称为uber-jar)的方法。根据引用,我们知道maven-shade-plugin可以完成这个任务,特别是它的shade目标,并且通常绑定到Maven生命周期的package阶段。 接下来,我将详细说明配置步骤: 1. 在pom.xml文件中添加maven-shade-plugin插件。 2. 配置插件执行(execution)绑定到package阶段,并指定shade目标。 3. 可以选择配置插件的其他选项,比如指定主类(Main-Class)等。 下面是一个基本的配置示例: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <!-- 使用最新版本 --> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 可选:指定主类 --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.Main</mainClass> <!-- 替换为你的主类 --> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 配置说明: - 在`<plugin>`标签中,我们指定了插件的groupId、artifactId和版本(建议使用最新版本,可以在Maven中央仓库查找)。 - 在`<executions>`中,我们将插件的shade目标绑定到package阶段,这样当我们运行`mvn package`时,就会触发shade插件执行。 - 在`<configuration>`中,我们使用了一个`ManifestResourceTransformer`来设置主类(Main-Class)。如果你的项目是一个可执行程序,这是必须的,否则在运行jar时会找不到主类。将`<mainClass>`的值替换为你的应用程序主类的全限定名。 此外,maven-shade-plugin还提供了其他功能,例如重命名依赖名以避免冲突、过滤不需要的内容等。如果有需要,可以进一步配置。 使用步骤: 1. 将上述配置添加到项目的pom.xml中。 2. 在命令行中运行`mvn clean package`。 3. 在target目录下,除了默认的jar,还会生成一个以`-shaded`或`-shaded.jar`结尾的jar(具体名称取决于配置),这个jar就是包含了所有依赖的uber-jar。 注意:有时候,生成的uber-jar可能会很大,因为它包含了所有依赖的类。如果项目中存在依赖冲突,maven-shade-plugin还可以通过重定位类(relocation)来解决。例如: ```xml <configuration> ... <relocations> <relocation> <pattern>com.google.guava</pattern> <shadedPattern>myproject.shaded.com.google.guava</shadedPattern> </relocation> </relocations> ... </configuration> ``` 这样,所有`com.google.guava`下的类将会被重定位到`myproject.shaded.com.google.guava`,避免与其他版本的guava冲突。 引用中提到的内容已经整合到上述说明中[^1]。 如果用户需要更复杂的配置,可以参考官方文档:https://maven.apache.org/plugins/maven-shade-plugin/ §§相关问题§§ 1. maven-shade-plugin除了打包依赖,还有哪些常用功能? 2. 如何解决使用maven-shade-plugin打包时遇到的依赖冲突? 3. maven-shade-pluginmaven-assembly-plugin打包uber-jar时有什么区别? </think> ### 使用 maven-shade-plugin 生成包含依赖Jar 以下是详细配置步骤: #### 1. 基础配置(pom.xml) ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <!-- 推荐使用最新版本 --> <executions> <execution> <phase>package</phase> <!-- 绑定到 package 阶段 --> <goals> <goal>shade</goal> <!-- 执行 shade 目标 --> </goals> <configuration> <!-- 基本配置 --> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` #### 2. 关键配置选项 ```xml <configuration> <!-- 设置主类 (必需) --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.MainApplication</mainClass> </transformer> </transformers> <!-- 过滤不需要的依赖 --> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <!-- 排除签名文件 --> <exclude>META-INF/*.DSA</exclude> </excludes> </filter> </filters> <!-- 解决依赖冲突 --> <relocations> <relocation> <pattern>com.google.guava</pattern> <shadedPattern>shaded.com.google.guava</shadedPattern> </relocation> </relocations> </configuration> ``` #### 3. 完整执行流程 1. **添加配置**:将上述插件配置添加到项目的 `pom.xml` 2. **构建命令**:执行 `mvn clean package` 3. **输出位置**:在 `target` 目录生成两个 Jar - `original-*.jar`(原始- `*-shaded.jar`(包含所有依赖的 Uber-Jar) #### 4. 验证结果 ```bash java -jar target/your-project-shaded.jar ``` #### 5. 注意事项 1. **主类必须设置**:否则无法直接执行 Jar 2. **依赖冲突处理**:使用 `<relocations>` 重命名冲突 3. **资源过滤**:建议排除签名文件避免安全警告 4. **文件大小**:Uber-Jar 可能较大,建议配合 ProGuard 优化[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值