Maven连同关联依赖一起打包成可执行jar

文章目录

  • Maven连同关联依赖一起打包成可执行jar
  • 前言
  • 一、前提知识
  • 二、上代码
    • 连同仓库依赖一起打包
    • 连同本地依赖一同打包

前言

Maven可以使用mvn package指令对项目进行打包生成jar文件,如果直接使用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、要能加载到依赖包。

使用Maven有多种打包插件,可以生成满足以上两个条件能直接运行的jar包,这里主要介绍一种,这种方式,可以将仓库依赖以及本地依赖一起打包成一个可执行jar。


一、前提知识

1、使用maven将项目打包成jar,对于非maven项目需要先进行转成maven项目。
在idea中,创建pom.xml文件,然后右键该文件。

2、使用maven添加仓库依赖和添加本地依赖
仓库依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.57</version>
</dependency>

本地依赖:(指定项目jar的路径)

<dependency><groupId>lib.zz1</groupId><artifactId>zz1pdz</artifactId><version>0.0.0</version><scope>system</scope><systemPath>${project.basedir}/lib/zz1/zz1pdz.jar</systemPath>
</dependency>

3、对于一些资源配置文件,若想一同打入jar中,可以通过方式;并指定指定maven编译的jdk版本

<build>
<!-- 指定打包资源 --><sourceDirectory>src</sourceDirectory><resources><resource><directory>spd</directory><excludes><exclude>**/*.java</exclude></excludes></resource><resource><directory>src</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><!-- 指定jdk版本 --><configuration><source>1.7</source><target>1.7</target><encoding>GBK</encoding></configuration></plugin><!-- 省略部分内容 -->

设置的jdk的编译版本,还需要修改ide工具的jdk编译版本,否则会编译出错。

二、上代码

连同仓库依赖一起打包

代码如下(示例):

<build><!—根据需要自己添加,或者省略,一般情况下可以省略,插件会默认打包-->    <sourceDirectory>src</sourceDirectory><resources><resource><directory>spd</directory><excludes><exclude>**/*.java</exclude></excludes></resource><resource><directory>src</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><!—指定maven编译的jdk--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.7</source><target>1.7</target><encoding>GBK</encoding></configuration></plugin><!—打包插件--><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>com.quan.simple.IncFrame</mainClass></manifest><manifestEntries><Class-Path>.</Class-Path></manifestEntries></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>
</build>

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

连同本地依赖一同打包

需要新建一个assembly.xml,路径随意(事后指定即可),填入内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<assembly><id>jar-with-dependencies</id><formats><format>jar</format></formats><includeBaseDirectory>false</includeBaseDirectory><dependencySets>        <!-- 默认的配置 --><dependencySet><outputDirectory>/</outputDirectory><useProjectArtifact>true</useProjectArtifact><unpack>true</unpack><scope>runtime</scope></dependencySet>        <!-- 增加scope类型为system的配置 --><dependencySet><outputDirectory>/</outputDirectory><useProjectArtifact>true</useProjectArtifact><unpack>true</unpack><scope>system</scope></dependencySet></dependencySets>
</assembly>

然后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>ZA24.21</groupId><artifactId>bchcmp</artifactId><version>1.0-SNAPSHOT</version><build><sourceDirectory>src</sourceDirectory><resources><resource><directory>spd</directory><excludes><exclude>**/*.java</exclude></excludes></resource><resource><directory>src</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><configuration><source>1.7</source><target>1.7</target><encoding>GBK</encoding></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><!-- 指定主程序入口 --><mainClass>com.cmb.cmp.hdl.CMPHDL_CmpProcess</mainClass></manifest><manifestEntries><Class-Path>.</Class-Path></manifestEntries></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals><configuration><descriptors><descriptor>assembly.xml</descriptor></descriptors></configuration></execution></executions></plugin></plugins></build><dependencies><!—仓库依赖 --><dependency><groupId>ZA24.21</groupId><artifactId>bchcom</artifactId><version>1.2-SNAPSHOT</version></dependency><!—本地依赖 --><dependency><groupId>lib.zz1</groupId><artifactId>zz1log</artifactId><version>0.0.0</version><scope>system</scope><systemPath>${project.basedir}/lib/zz1/zz1log.jar</systemPath></dependency></dependencies>
</project>

留言:文章是博主本人遇到问题,通过各种渠道收集资料解决后,并记录在word文档里,最后才整理发博,因此有些相似的内容是借鉴网友的,若有雷同,请谅解!

Maven连同关联依赖一起打包成可执行jar相关推荐

  1. Java Maven项目打包成可执行jar文件

    在pom文件中添加一下内容 <build><plugins><plugin><!-- Build an executable JAR --><gr ...

  2. java jar log4j_java项目打包成可执行jar用log4j将日志写在jar所在目录操作

    开发一个demo时想将日志输出到最终打包的jar所在目录,从网上学习实验整理之后的配置如下, log4j.properties log4j.rootLogger = INFO,console,logF ...

  3. maven java 可执行jar_Maven项目打包成可执行Jar文件

    在使用Maven完成项目以后,如果需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁 ...

  4. Maven项目打包成可执行Jar文件

    在使用Maven完成项目以后,如果需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁 ...

  5. maven-将maven工程打包成可执行jar包

    为什么80%的码农都做不了架构师?>>>    方法一:将项目及所依赖的所有jar包打包成一个jar. 1.pom.xml添加assembly插件 2.执行mvn assembly: ...

  6. java 打包 配置文件_有关打包成可执行jar包后引用jar包中配置文件问题

    一 问题由来 有时候我们做一些项目时,需要将一些配置信息写入配置文件中,以供调用.比如说这样: 如果我们需要在Demo.java中读取config.txt这个文件中的配置信息,在这种工程目录下是可以使 ...

  7. 使用Maven把项目打包成可执行jar在Idea里

    参照[https://www.cnblogs.com/acm-bingzi/p/6625303.html] 有效部分:build标签内 1 <build> 2 <plugins> ...

  8. maven项目打包成可执行jar,包含resource下文件

    pom.xml添加配置,可以直接用mvn package打包 <build><resources><resource><directory>src/ma ...

  9. Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar

    我们使用Spring Boot 2.0 创建好我们的项目后,我们一般需要打包,然后部署到服务器上. 打包步骤: 1. 选中项目,右键--> Open Module Settings. 2. 切换 ...

最新文章

  1. 华为,你终于活成了他们害怕的样子
  2. php header setcookie,php中header头设置Cookie与内置setCookie的区别,和js对cookie操作
  3. 040_Unicode对照表六
  4. (chap9 基于HTTP的功能追加协议) HTTP瓶颈
  5. 平板电脑哪个品牌的好_平板电脑性价比排行 这些品牌你值得拥有
  6. 39道高级java面试题及答案(最新)
  7. 设置ComboBox控件的小箭头颜色.
  8. jpa-spring -basic
  9. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
  10. Google 将于明年彻底关闭 Chrome Apps,以后就是 PWA 的天下了
  11. GSCOOLINK GSV2006替CH6002 HDMI2.0接口芯片
  12. 前端工程师的摸鱼日常(9)
  13. 监听php队列,执行一个队列监听
  14. MetaMask10.6.1点击切换本地网络LocalHost:8545没反应
  15. python定义一个triangle类_Python定义一个三角形类Python学习阶段综合练习2,python,triangle,二...
  16. java正则表达式匹配单引号_java - 正则表达式,用于在未被单引号或双引号括起时使用空格分割字符串...
  17. 脚本不得关闭非脚本打开的窗口。Scripts may close only the windows that were opened by it...
  18. 四旋翼无人机——导航、制导与控制的概念
  19. 快排和归并排序哪个更快
  20. 织梦php 文章采集规则,DEDE全自动采集插件

热门文章

  1. Python3 英文字母转换哥特式字体
  2. 爱因斯坦评传(ZT)
  3. 网易新闻app 喜马拉雅app数据接口
  4. 近8000亩!山东大学,将迎最大校区:龙山校区(创新港)
  5. 2020,会成为区块链在中国的元年吗?
  6. 【JY】ETABS的非线性直接积分法的设置与应用
  7. cdf表格_高速公路表格一览表
  8. 场景分享|40多种常见的电子签应用场景汇总
  9. 19岁天才少年纯手工自制CPU,直呼NB
  10. 硬件设计40之什么是PLA、NTSC?