maven的5种打包方式,终有一款适合你(一)

2023-11-16

话不多说,上主题:

1.1 概述

在讲打包方式之前,首先来说最近踩到的坑,在idea新建的maven项目,在pom文件中会自动生成一段插件的管理器:

我使用maven打包插件maven-assembly-plugin,将其配置添加到<plugManagement><plugs>.. ..</plugs></plugManagement>中间。

执行maven 打包后:报没有主清单

将网上查找了个遍,痛苦到怀疑人生,也没有发现什么端倪,感觉配置的很正确,并且在eclipse中都在项目中用过。

在当天例会将问题抛出,会后同样的配置在晓晨的机器上,执行成功了,不和思议,不知道错在那?后来进过分析验证,找到原因。

1.2 原因

先来了解一下pluginManagement

pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。

pluginManagement一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。

plugins就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。

pluginManagement主要是为了统一管理插件,确保所有子POM使用的插件版本保持一致,类似dependencies和dependencyManagement。

总结一句话:pluginManagement标签中声名的plug插件不参与maven的生命周期,不会被加载,但可以通过子类继承后,子类应用来使用。

这就是为何在plugManagemnet中配置maven-assembly-plugin插件后不起作用,找不到主类的原因。

https://blog.csdn.net/qq_15266291/article/details/77198073

1.3 解决办法

1.在plugMangement标签下,自定义自己的打包插件配置

2.重新打包,执行jar包

执行成功ok!

二 Maven常用打包插件

2.1 maven-assembly-plugin插件打包

作用:将自己项目中的代码和资源,还包含了所有依赖包的内容打成一个jar包。

  1. pom文件的配置:如果有plugManagemnet则在其外面添加如下代码

<!--自定义打包方式-->
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.5.5</version>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.ljf.test.Ha</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

打包后会在target目录下生成一个xxx-jar-with-dependencies.jar文件,这个文件不但包含了自己项目中的代码和资源,还包含了所有依赖包的内容。所以可以直接通过java -jar来运行。

2.生成jar包的结构

https://blog.csdn.net/daiyutage/article/details/53739452

2.2 maven-shade-plugin插件打包

作用:和maven-assembly-plugin插件的作用一样,将自己项目的代码资源以及依赖第三方的资源一起打成一个jar包不过如果项目中用到spring Framework,用maven-assembly-plugin这种方式打出来的包运行时会出错,使用maven-shade-plugin插件可以处理这个问题

1.pom文件的配置:如果有plugManagemnet则在其后面添加如下代码

<!--自定义打包方式-->
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.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.ljf.test.Ha</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

1.执行jar包后的结构

执行打包后在target目录下会生成两个jar包,注意不是original-xxx.jar文件,而是另外一个。和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。

未完见下一篇...............................................

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

maven的5种打包方式,终有一款适合你(一) 的相关文章

随机推荐

  • 路由器ipv6怎么设置才能上网_设置路由器时,如何正确选择上网方式?

    设置路由器时 常见有自动获得IP地址 宽带拨号上网 固定IP地址三种上网方式 选择任意一个 均可进入下一步 但上网方式选择错误 即使设置步骤完成 也不能上网 那么设置路由器时 如何正确选择上网方式呢 取决于当前宽带线路的上网方式 本文以Wi
  • NoSQL -- 1.NoSQL与TRDB的区别

    TRDB TRDB Traditional Relational Database 即 传统关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 其以行和列的形式存储数据 以便于用户理解 关系型数据库这一系列的行和列被称为表 一
  • 将一个对象的属性值赋值给另一个对象

    java 对象属性复制 将一个对象的属性值赋值给另一个对象 属性名需要相同 import org springframework beans BeanUtils BeanUtils copyProperties 源对象 目标对象
  • 一位老学长的真实互联网校招求职心路历程~

    自我介绍 听说很多家公司2019年的春招已经陆续开始了 作为一个备战过2018年春招和秋招的求职狗 想来聊一下自己的校招求职经历 我本科是哈尔滨的一所211大学 万年老二 学的是电子信息工程 由于当年高考发挥失常 自己又不想复读 所以从入学
  • Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示

    场景 GeoTools GeoTools 是一个开源的 Java GIS 工具包 可利用它来开发符合标准的地理信息系统 GeoTools 提供了 OGC Open Geospatial Consortium 规范的一个实现来作为他们的开发
  • SLAM--三角测量SVD分解法、最小二乘法及R t矩阵的判断

    目录 一 三角测量 方法一 SVD分解法的推导 方法二 最小二乘法求解 二 ORB SLAM2 三角测量源码 三 利用Eigen源码实现三角测量 方法一 SVD分解法 方法二 最小二乘法求解 速度最快 方法三 利用OpenCV自带函数 四
  • go语言面试题:令牌桶算法原理

    令牌桶算法是一种常见的限流算法 它基于一个简单的思想 系统中的请求像一个桶 在请求发送之前都需要从桶中获取一个令牌 如果桶里没有可用的令牌 则该请求会被暂时禁止 具体来说 令牌桶算法会在桶内放入固定数量的令牌 这些令牌以固定的速率自动回复
  • 二阶系统响应指标图_一阶和二阶系统的动态特性参数

    检测系统的时域动态性能指标一般都是用阶跃输入时检测系统的输出响应 即过渡过程曲线上的特性参数来表示 1 一阶系统的时域动态特性参数 一阶测量系统时域动态特性参数主要是时间常数及与之相关的输出响应时间 1 时间常数 时间常数是一阶系统的最重要
  • 三十一.刷题.20

    统计给定的n个数中 负数 零和正数的个数 include
  • LeetCode 1309. 解码字母到整数映射

    给你一个字符串 s 它由数字 0 9 和 组成 我们希望按下述规则将 s 映射为一些小写英文字符 字符 a i 分别用 1 9 表示 字符 j z 分别用 10 26 表示 返回映射之后形成的新字符串 题目数据保证映射始终唯一 示例 1 输
  • 练习题:猜年龄游戏升级版

    猜年龄游戏升级版 需求 1 允许用户最多尝试3次 2 每尝试3次后 如果还没猜对 就问用户是否还想继续玩 如果回答Y或y 就继续让其猜3次 以此往复 如果回答N或n 就退出程序 3 如何猜对了 就直接退出 import random n r
  • mysql基础--存储过程

    文章目录 MySQL存储过程 1 创建存储过程 2 调用存储过程 3 变量定义 3 1 局部变量 3 2 用户变量 3 3 系统变量 3 3 1 系统变量 全局变量 3 3 2 系统变量 会话变量 4 存储过程传参 4 1 in 4 2 o
  • Unity进阶--物品,背包,角色管理器

    文章目录 物品管理器 背包管理器 角色管理器 物品管理器 物品数据 Item json json部分 Resources Data Item id 1 name 新手剑 des 这是一把宝剑 price 200 icon attack 10
  • C语言:通过函数指针来完成两个数的加减乘除(函数指针当做参数使用)

    main c Function pointer Created by mac on 15 8 2 Copyright c 2015年 All rights reserved 要求 将函数指针做参数来求两个整数的和 差 积 商 知识点 函数指
  • 【深度学习与计算机视觉】10、深度学习框架Tensorflow

    Tensorflow
  • python做的多激光雷达外参标定程序(初版本 完整版见专栏)

    查阅了一番资料和现有的代码后发现 现在的多个激光雷达之间的标定程序都是ROS框架下面的 并且都是C 代码 需要安装的依赖也比较复杂 于是自己写了一个python版本的标定程序 依赖非常简单 Windows系统也可以运行 并且代码简单 扩展性
  • 网络安全—DDOS和CC攻击的区别

    DDOS和CC攻击的区别 1 攻击简介 DDOS 分布式拒绝服务攻击 通过向目标发送大量数据包 耗尽其带宽 来使目标无法可用 CC攻击 DDOS的一种 也可以理解为应用层DDOS攻击 利用大量代理服务器对目标计算机发起大量连接 导致目标服务
  • 华中师范大学2018年874

    lt 对数组A的N个整数从小到大进行连续编号 输出各个元素的编号 例如对数组 A 5 3 4 7 3 5 6 则输出为 3 1 2 5 1 3 4 include
  • C++ 模板的显示具体化

    C 没有办法限制类型参数的范围 我们可以使用任意一种类型来实例化模板 但是模板中的语句 函数体或者类体 不一定就能适应所有的类型 可能会有个别的类型没有意义 或者会导致语法错误 例如有下面的函数模板 它用来获取两个变量中较大的一个 temp
  • maven的5种打包方式,终有一款适合你(一)

    话不多说 上主题 1 1 概述 在讲打包方式之前 首先来说最近踩到的坑 在idea新建的maven项目 在pom文件中会自动生成一段插件的管理器 我使用maven打包插件maven assembly plugin 将其配置添加到