当前位置: 首页 > news >正文

Maven Shade Plugin 插件使用说明

Maven Shade Plugin 插件使用说明

  • 1 Maven Shade Plugin 地址
  • 2 Maven Shade Plugin 特点
  • 3 maven-shade-plugin 的用法
    • 3.1 maven-shade-plugin 的基本用法
      • 3.1.1 不配置 Main Class,打包成不可执行的jar包
      • 3.1.1 配置 Main Class,打包可执行的jar包
    • 3.2 选择、排除依赖Jar包的文件
    • 3.3 修改Class文件路径
  • 4 maven-shade-plugin 会自动创建 dependency-reduced-pom.xml
    • 4.1 为什么需要 dependency-reduced-pom.xml
      • 4.1.1 生成
      • 4.1.2 使用
    • 4.2 配置不生成

1 Maven Shade Plugin 地址

https://maven.apache.org/plugins/maven-shade-plugin/index.html

2 Maven Shade Plugin 特点

  • maven-shade-plugin ,它可以在构建过程中创建 一个包含所有依赖项的Jar文件。
  • 能够对某些依赖项的包进行遮蔽处理——即对其进行重命名。
  • 可打包可执行的jar包(配置Main Class)和不可执行的jar包(不配置 Main Class)

3 maven-shade-plugin 的用法

3.1 maven-shade-plugin 的基本用法

3.1.1 不配置 Main Class,打包成不可执行的jar包

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.6.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals></execution></executions></plugin></plugins></build>

不可执行的 JAR 文件主要用作 Java 类库(Library JAR),它不包含可以直接运行的主类。这样的 JAR 文件通常被引入到其他
Java 项目中作为依赖项使用

3.1.1 配置 Main Class,打包可执行的jar包

官方原文地址: https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

在configuration->transformers->transformer->mainClass 节点中设置主类,使生成的 JAR 文件可以直接通过 java -jar 命令运行,

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.6.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>org.sonatype.haven.HavenCli</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>

可执行的 JAR 文件包含一个可以直接运行的 Java 应用程序。要使 JAR 文件可执行,它必须包含一个 Main-Class
属性,该属性指定要运行的主类(main class)

3.2 选择、排除依赖Jar包的文件

官网原文:https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html
下面的 POM 代码片段展示了如何控制哪些项目依赖项应被包含/排除在超集 JAR 文件中:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.6.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><artifactSet><excludes><exclude>classworlds:classworlds</exclude><exclude>junit:junit</exclude><exclude>jmock:*</exclude><exclude>*:xml-apis</exclude><exclude>org.apache.maven:lib:tests</exclude><exclude>log4j:log4j:jar:</exclude></excludes></artifactSet></configuration></execution></executions></plugin></plugins></build>

3.3 修改Class文件路径

使用 relocations 可以将某些类的路径修改,以防止不同依赖中的类冲突:
官网地址:https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.6.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><relocations><relocation><pattern>org.codehaus.plexus.util</pattern><shadedPattern>org.shaded.plexus.util</shadedPattern><excludes><exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude><exclude>org.codehaus.plexus.util.xml.pull.*</exclude></excludes></relocation></relocations></configuration></execution></executions></plugin></plugins></build>

这会指示插件将位于“org.codehaus.plexus.util”及其子包中的类移动到“org.shaded.plexus.util”这个包中。而类“Xpp3Dom”以及pull.*相关文件保留在其原始的包中。

还可以通过使用“include”标签来缩小该模式的范围:

<project>...<relocation><pattern>org.codehaus.plexus.util</pattern><shadedPattern>org.shaded.plexus.util</shadedPattern><includes><include>org.codehaud.plexus.util.io.*</include></includes></relocation>...
</project>

4 maven-shade-plugin 会自动创建 dependency-reduced-pom.xml

在使用 Maven 的 maven-shade-plugin 插件时,确实会生成一个名为 dependency-reduced-pom.xml 的文件。这个文件是 Maven 项目的一个特殊版本,主要用于解决依赖冲突和简化最终的依赖结构。

4.1 为什么需要 dependency-reduced-pom.xml

依赖冲突解决:在大型项目中,可能会有多个库包含相同版本的依赖,但由于不同的作用域(compile, provided, runtime 等)或不同的版本,这些依赖可能会冲突。maven-shade-plugin 在创建 uber-jar 时,会尝试解决这些冲突,并生成一个简化后的 POM 文件,该文件只包含实际需要的依赖版本。

简化依赖结构:生成的 dependency-reduced-pom.xml 文件只包含最终项目中实际使用的依赖项和它们的版本,这对于确保构建的可重复性和清晰性非常有用。

4.1.1 生成

当你运行带有 maven-shade-plugin 的 Maven 构建时,插件会自动生成这个文件,在构建过程中,dependency-reduced-pom.xml 会被创建在 target/ 目录下。

4.1.2 使用

虽然通常不需要手动操作这个文件,但它对于理解项目的最终依赖结构非常有帮助。你可以在需要时查看这个文件来了解项目中实际包含哪些库和它们的版本。例如,如果你需要将项目部署到不支持完整 Maven 仓库的环境中,这个文件可以帮助你手动管理依赖。
注意事项

  • 不要修改:通常不建议手动修改 dependency-reduced-pom.xml,因为它代表了构建过程中的一个中间产物。任何修改都可能影响构建的一致性和可重复性。
  • 版本控制:如果你需要保留这个文件以便将来参考,可以考虑将其添加到项目的版本控制中,尽管这通常是可选的。
    通过使用 maven-shade-plugin 和其生成的 dependency-reduced-pom.xml,你可以有效地管理和分发包含所有必需依赖的单一 JAR 文件,这对于部署和分发应用程序非常有用。

4.2 配置不生成

在 maven-shade-plugin所在的 标签下(或者 plugin-executions-execution 标签狭隘)添加

<configuration><createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
http://www.dtcms.com/a/337917.html

相关文章:

  • 【音视频】ISP能力
  • 阿里云odps和dataworks的区别
  • 多数据源 Demo
  • 机器学习之数据预处理(二)
  • HBM CPU Cache / GPU Cache 的关系
  • 第一阶段C#-14:委托,事件
  • ubuntu 下载安装tomcat简单配置(傻瓜式教程)
  • minio安装和配置
  • JUC读写锁
  • 视觉语言导航(7)——VLN的数据集和评估方法 3.2
  • openfeign 只有接口如何创建bean的
  • C++多线程编程深度解析【C++进阶每日一学】
  • 【损失函数】完全解析(两万字解读)
  • 现有网络模型的使用及修改
  • 一般情况下,python函数都会返回对象,但有时只调用一个函数,这是在修改这个信息
  • CAG缓存增强生成与RAG检索增强生成对比
  • CAG缓存检索生成 案例流程
  • 04高级语言逻辑结构到汇编语言之逻辑结构转换 do...while 结构
  • Android Studio受难记
  • echarts实现3个y轴的图表
  • 传输层协议——TCP
  • 刺猬的开发笔记之企业级兑换奖励c端链路开发
  • 【图论 次短路】P1491 集合位置|省选-
  • 【typenum】 17 非负数标记
  • Ansible 部署LNMP
  • shell脚本实现读取ini键值
  • 部署过程 99年证书
  • Servlet上传文件
  • 亚马逊新手突围:从流量破冰到持续出单
  • ACCESS窗体如何导出到文件,导入另一个工程?