Maven 如何打包可运行jar包

maven打包的5种方式总有一款适合你【超赞】 1.用于生成META-INF/MANIFEST.MF文件的部分内容,com.xxg.Main指定MANIFEST.MF中的Main-Class,true会在MANIFEST.MF加上Class-Path项并配置依赖包,lib/指定依赖包所在目录。2.maven-dependency-plugin插件。 阅读详情

目标

解决可执行jar包的打包问题;上一篇文章我们介绍了mvn package可以打包,那么如果是一个可执行的jar包,该如何打包呢?

可以执行jar

拥有函数入口(public static void main(String[] args) {}),我们可以通过java -jar xxx.jar 来执行进入这个main函数。打成可执行效果,是通过mainfest.mf文件来指定的。因此如果不依赖其他工具进行打包,需要手动添加 MANIFEST.MF 到 META-INF/MANIFEST.MF
例如:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangzhiping
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_101
Main-Class: wzp.study.maven.mainclass.HelloWorld

maven 打包可执行jar

maven-jar-plugin

  • pom.xml 配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>study.wzp.maven</groupId>
  <artifactId>maven-hello</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>maven-hello</name>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <!-- META-INF/MANIFEST.MF 添加 Main-Class: -->
              <mainClass>study.wzp.maven.App</mainClass>

              <!-- META-INF/MANIFEST.MF 添加 ClassPath: 外部依赖指定  -->
              <addClasspath>true</addClasspath>

              <!-- META-INF/MANIFEST.MF : 指定依赖包所在目录前缀 -->
              <classpathPrefix>/lib</classpathPrefix>
            </manifest>
          </archive>
        </configuration>
      </plugin>

      <!-- 自动实现将依赖拷贝到 lib 目录下,不然需要手动的执行-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>

            <goals>
              <goal>copy-dependencies</goal>
            </goals>

            <configuration>
              <!-- ${project.build.directory} 这是项目属性,后续篇章会有讲述 -->
              <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
  • MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangzhiping
Class-Path: /lib/junit-4.10.jar /lib/hamcrest-core-1.1.jar
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_101
Main-Class: study.wzp.maven.App
  • 生成的目录
    这里写图片描述
    这里写图片描述
使用maven-jar-plugin,存在外部依赖时,需要指定外部依赖的位置(建议使用:maven-dependency-plugin)帮助管理,不能打包在一块,感觉不是很方便。

详细参考: https://maven.apache.org/plugins/maven-jar-plugin/

maven-shade-plugin

  • pom.xml 配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>study.wzp.maven</groupId>
  <artifactId>maven-hello</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>maven-hello</name>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>study.wzp.maven.App</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
  • MANIFEST.MF
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: wangzhiping
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_101
Main-Class: study.wzp.maven.App
  • 项目目录
    这里写图片描述
会生成maven-hello-1.0-SNAPSHOT.jar 和 origin-maven-hello-1.0-SNAPSHOT.jar 两个打包文件,
1、maven-hello-1.0-SNAPSHOT.jar :将依赖一起合并打包的jar;
2、origin-maven-hello-1.0-SNAPSHOT.jar:不包含任何依赖的jar,如果存在依赖,那么这个文件会报错;

详细使用参考:https://maven.apache.org/plugins/maven-shade-plugin/

maven-assembly-plugin

  • pom.xml 配置
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>study.wzp.maven.App</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>with-dependencies</descriptorRef>
          </descriptorRefs>

        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
</plugin>
  • 项目目录
    与shade相比,基本一致,会生成两个文件
1、maven-hello-1.0-SNAPSHOT.jar:无依赖关系,不可执行;
2、maven-hello-1.0-SNAPSHOT-jar-with-dependencies.jar:依赖合并打包,可执行。

详细可参考:https://maven.apache.org/plugins/maven-assembly-plugin/

总结

如果打包可执行jar,建议使用maven-shade-plugin或者maven-assembly-plugin,一起打包会更好些。可以直接执行。

参考:

[1] http://blog.youkuaiyun.com/xiao__gui/article/details/47341385
[2] https://baike.baidu.com/item/MANIFEST.MF

使用Maven将Dubbo工程打包为可运行的JAR包 Maven是一个流行的项目管理工具,可以方便地管理Java项目的依赖和构建过程。如果你想将Dubbo工程打包成一个可执行的JAR包来运行,可以按照以下步骤进行操作。以上就是使用Maven将Dubbo工程打包为可运行的JAR包的步骤。在工程的根目录下应该包含一个名为pom.xml的文件,该文件定义了工程的依赖和构建配置。该命令会触发Maven的打包过程,生成可执行的JAR包。打包过程中,Maven会下载工程所需的依赖,并将它们打包到JAR包中。在pom.xml文件中,添加Maven插件以打包工程为JAR。 阅读详情

相关推荐

从亚稳态到流片失败:SpyGlass CDC在5G芯片设计中的避坑指南

本文深入探讨了在复杂5G芯片设计中,如何利用SpyGlass CDC工具构建高效的时钟域交叉验证流程,以避免因亚稳态问题导致的流片失败。文章结合实战经验,详细解析了从约束编写、时钟复位完整性检查到层次化验证和特殊场景处理的全过程,并强调了精准的检查约束是确保验证有效性的基石,旨在帮助设计团队安全跨越异步时钟域的雷区。

weixin_29168153的博客 444

Maven生成可以直接运行的jar包的多种方式

Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。 要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里; 2、要能

叉叉哥的BLOG 19万+

HDMI2.1 FRL流控 概览

HDMI 2.1 FRL的流控本质是。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 2080

探究maven项目的打包方式

现在都是使用idea中maven插件来打包项目,因此此文章将基于idea中的maven插件打包。打包分为小包和大包两种概念: 小包:只打包我们写的代码,不打包代码依赖的其他jar包。 大包:打包项目本身的代码以及项目所依赖的其他jar包。因此,如果我们的项目代码只需要被别的代码引用,也就是不需要启动类去运行,那么打包成小包即可,如果我们的项目需要独立的运行,需要启动类去运行,那么就需要打包成大包。我们先创建一个maven项目,创建一个启动类,随便引入一个其他依赖。启动类pom文件

阿伟的博客 2万+

FPGA_adc采样并通过以太网发送到上位机

本项目使用FPGA-ZYNQ-7020采集8通道ADC数据,通过以太网上传到上位机显示波形PL部分包括数据的获取与处理,数据从PL传递到PSPS部分包括以太网的发送,由PL到PS的中断触发本文章不详细讲解背后原理 但保证每一步足够详细,跟着就能实现。本人FPGA平台 大磊FPGA7020开发板 vivado2020.2 vitis2020.2 匿名上位机公开版

weixin_42304868的博客 5623

SD-WAN组网案例——数据中心

SD-WAN组网案例——数据中心

2301_78457663的博客 705

maven 常用打包方式汇总

常用的maven打包方式

Record Little 8903

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 750

idea打包jar包_利用MAVEN打包可运行jar包,包括依赖的第三方包

利用MAVEN打包可运行jar包,包括依赖的第三方包转载自:http://bglmmz.iteye.com/blog/2058914背景:另一篇文章说了如何利用IDEA来打包,现在来说说如何利用MAVEN打包目标:应用本身打成一个jar包,依赖的第三方包放到lib目录下开发环境OS:Windows 8.1JDK:1.7.0开发工具:IntelliJ IDEA 13.1.1步骤:1. 首先...

weixin_39895096的博客 1068

北航机器学习2020-2021秋季学期期末试题回忆

北航机器学习2020-2021秋季学习期末试题回忆 fanjn, zhangyy, yuanq, wanggq, weixy, anh, wangyy, zhouxy, likc1 【注:考试使用纯白的A3答题纸,考试时间2h,各位同学可以自行模拟考试】 此试卷1-8题为10分,第9题为20分 1.2077年人类发射近地卫星,一共发射800颗,根据大小和轨道远近,有着不同的宜居条件(+表示宜居),有以下表格(数字八九不离十,其他属性什么的原题就是交替的) 数量 大小 轨道 是否宜居 30

weixin_45262065的博客 7608

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1365

【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包

使用maven构建工具可以将工程打包生成普通的jar包、可运行的jar包,也可以将所有依赖一起打包生成jar;一、普通的jar包普通的jar包只包含工程源码编译出的class文件以及资源文件,而不包含任何依赖;同时还包括pom文件,说明该包的依赖信息; 在工程pom文件下这样写,可生成普通的jar包:<packaging>jar<packaging>或者,不写,因为packaging默认打包类型为

吃货小跟班的博客 8万+

华为OD机试 - 商品推荐多属性排序 - 数组(Python/JS/C/C++ 双机位A卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。双十一来临,小王准备买某个购物平台买坚果。在输入坚果时,页面默认按照综合推荐列表。小王想知道这个综合排序时如何完成的,于是便开始思考算法题。经过一番操作后,完成它的多个关键词排序算法。希望你给小王提供一份正确的排序结果,验证其实现算法结果的准确性

学Java,找哪吒 622

Maven 打包可运行jar包

Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。要想jar包能直接通过java -jar xxx.jar运行,需要满足:1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;

【设计改变世界】github地址:https://github.com/guochunyang2004 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

maven build打包java项目为可运行的jar包

上个星期帮人做一个考勤统计的小项目,用的是java的swing。做是做完了,但是想像其它的软件一样双击就可以运行它,这就要用maven打成可运行的jar包,这可是个问题呀?还好只用了一天就搞定了,但是觉得有点蛋疼,所以想它记录下来,以免下次会用到,好了,废话不多说了。当然你的eclipse里面要装有maven插件,没装的话去百度一下很简单。 第一步:先在pom.xml文件里加上如下配置 &l...

jamesssemaj的专栏 8388

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java:如何使用maven把项目及其依赖打包为可运行jar包

我想把java项目打包为可运行的分布式jar包。我该怎样做,才能把项目中maven所依赖的jar包导入到我的项目jar包中?(译注:执行完后,会在你的maven项目的target目录下,生成想要的jar包,而不再需要使用。通常情况下,上述maven命令执行后会自动绑定到项目的构建阶段,从而保证了以后在执行。之前,否则打包后的jar包内将不会有你的编译代码。可以被省略,若省略则按照下述默认的配置执行)怎样去运行打包后的可运行jar包?(译注:下面是实际上完整的默认的。命令时的jar包也会被构建。

2402_83194310的博客 289

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如何使用maven把项目及其依赖打包为可运行jar包

Java 必知必会 第 24 篇 how-can-i-create-an-executable-jar-with-dependencies-using-maven 如何使用maven把项目及其依赖打包为可运行jar包 问题 我想把java项目打包为可运行的分布式jar包。我该怎样做,才能把项目中maven所依赖的jar包导入到我的项目jar包中? 回答 在pom.xml文件中,加入如下的插件: &...

十年互联网开发老兵,陪你一起学技术 524

0430---maven 项目打包为可运行jar包的步骤及应注意事项

maven 项目打包为可执行jar包的步骤及应注意事项

gmriwyf的博客 2377

IDEA打包Maven项目,打包成可运行Jar包

今天用webmagic写了个爬虫,用的是Maven项目形式,最后想打包成一个可运行的Jar包放到服务器上运行,遇到了一些问题,在这里做一下总结。主要是对maven还不熟悉和对Idea的使用不够熟练造成的。 一开始是直接用了mvn package 命令直接打包项目,cd 进target目录之后执行 java -jar xxx.jar之后报了一个错误 No main manifest attrib...

godelgnis的博客 5916

maven 打包可运行jar包

  Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。 要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1、...

jcpp9527的博客 3万+

Java项目maven打包可运行jar包方法

1、前提 Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。 要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在

浩瀚星空,法力无边;其大无外,其小无内。 2429

springboot(maven)项目打包成可运行的jar包教程

springboot(maven)项目打包成可运行的jar包教程 1、开发工具:eclipse或者myeclipse; 2、右键项目,找到export 3、选择可运行的jar包 4、这个很重要 5、导出结果 6、WebShoppingCFRSEx_start.bat 7、运行bat文件后,程序启动没有问题,但是有时候springboot没有加载到配置文件,所以在访问项目的时候会报找不到配置文件错误 8、找不到resources下的配置文件解决方案 在build path中将下图 修改成下图 然

linge511873822的博客 705
上一篇: Maven 入门篇
下一篇: Maven 依赖管理
紫守笨
博客等级 码龄15年 55粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值