maven打包可执行的jar包:

  • 1. 首先确保编辑器里maven环境正常
  • 2. 运行打包的jar文件
  • 3. 测试添加依赖后打包。
  • 4. Unable to access jarfile test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.
  • 5. 注意cmd命令传入中文参数乱码

1. 首先确保编辑器里maven环境正常

我这里已经有现成的maven环境和工具类了,这里先使用myeclipse先测试一下maven打包,不包含任何依赖,只包含一个类,里面定义main函数。

public class TestJarApplication{public static void main(String[] args) {for (int i = 0; i < args.length; i++) {System.out.println(args[i]);}System.out.println("Hello World!!!!!");}
}

pom文件内容为:

<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>com.lin</groupId><artifactId>test-maven-01</artifactId><version>0.0.1-SNAPSHOT</version><!-- 指定maven编译方式为jdk1.8版本 --><profiles><profile><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles><build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>com.lin.TestJarApplication</mainClass></manifest></archive></configuration></plugin></plugins></build>
</project>

这里使用maven-assembly-plugin打jar包配置文件(含主类设置),并且如果pom文件里面包含依赖,可将依赖一块打入jar包里面,可在外部直接使用java -jar XXX.jar 运行。

之后右键项目名,使用run as --> maven install

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building test-maven-01 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test-maven-01 ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test-maven-01 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ test-maven-01 ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test-maven-01 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ test-maven-01 ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ test-maven-01 ---
[INFO]
[INFO] --- maven-assembly-plugin:2.2-beta-5:single (default) @ test-maven-01 ---
[INFO] Building jar: D:\MyEclipse-WorkSpace\test-maven-01\target\test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ test-maven-01 ---
[INFO] Installing D:\MyEclipse-WorkSpace\test-maven-01\target\test-maven-01-0.0.1-SNAPSHOT.jar to D:\maven\LocalMavenRepository\com\lin\test-maven-01\0.0.1-SNAPSHOT\test-maven-01-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\MyEclipse-WorkSpace\test-maven-01\pom.xml to D:\maven\LocalMavenRepository\com\lin\test-maven-01\0.0.1-SNAPSHOT\test-maven-01-0.0.1-SNAPSHOT.pom
[INFO] Installing D:\MyEclipse-WorkSpace\test-maven-01\target\test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar to D:\maven\LocalMavenRepository\com\lin\test-maven-01\0.0.1-SNAPSHOT\test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.957 s
[INFO] Finished at: 2020-12-30T15:10:06+08:00
[INFO] Final Memory: 12M/232M
[INFO] ------------------------------------------------------------------------

BUILD SUCCESS 表示maven打包成功。
此时,项目的target文件夹下会生成两个jar包,一个是只包含项目编译后的class文件的test-maven-01-0.0.1-SNAPSHOT.jar,一个是带有依赖的test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar

从文件名上也可以区分出来,目前由于还没有依赖,所以这俩jar里面的内容是一样的,可以分别解压看下。

2. 运行打包的jar文件

接着来运行一下打包的jar,看下是否正常。
test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷贝到新的文件夹E:\jar\test-jar下。
打开cmd命令,切换到E:\jar\test-jar执行java -jar test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar 正常会输出Hello World !,由于main函数里面添加了输出启动命令的参数,可在命令后面添加动态参数,可以传入jar里面运行。

3. 测试添加依赖后打包。

由于这次编写工具jar是为了处理excel文件的,这里就加了poi和easyExcel的依赖。

完整的pom文件内容为:

<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>com.lin</groupId><artifactId>test-maven-01</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version><!-- <version>1.0.4</version> --></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.12</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.11</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.10-FINAL</version></dependency></dependencies><!-- 指定maven编译方式为jdk1.8版本 --><profiles><profile><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles><build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><!-- 这里定义程序运行的入口 --><mainClass>com.lin.TestJarApplication</mainClass></manifest></archive></configuration></plugin></plugins></build>
</project>

再次使用maven install,则可以看到控制台在编译结束后,会将依赖打入jar包里面。

最后是:

[INFO] META-INF/LICENSE.txt already added, skipping
[INFO] META-INF/NOTICE.txt already added, skipping
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ test-maven-01 ---
[INFO] Installing D:\MyEclipse-WorkSpace\test-maven-01\target\test-maven-01-0.0.1-SNAPSHOT.jar to D:\maven\LocalMavenRepository\com\lin\test-maven-01\0.0.1-SNAPSHOT\test-maven-01-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\MyEclipse-WorkSpace\test-maven-01\pom.xml to D:\maven\LocalMavenRepository\com\lin\test-maven-01\0.0.1-SNAPSHOT\test-maven-01-0.0.1-SNAPSHOT.pom
[INFO] Installing D:\MyEclipse-WorkSpace\test-maven-01\target\test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar to D:\maven\LocalMavenRepository\com\lin\test-maven-01\0.0.1-SNAPSHOT\test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.721 s
[INFO] Finished at: 2020-12-30T15:25:21+08:00
[INFO] Final Memory: 31M/762M
[INFO] ------------------------------------------------------------------------

对比下两次打包后,jar文件的大小,差别就很明显了。

用好压打开两个jar对比:

此时才算完整的将工具打包完成。

工具有了,但是执行的时候,每次都要输入一串命令,还是不太方便,那就来个bat脚本执行。

在jar包同一文件夹下新建run.bat文件,内容如下:

@echo offjava -jar test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.jar E:/jar/bat-jar/GA-kqtj.xlspause

这里@echo off表示不将命令输出到屏幕上
java -jar是我们执行jar的命令。
pause 是运行结束不自动关闭窗口。

双击运行 run.bat,即可自动运行工具类,同时输出动态参数。

4. Unable to access jarfile test-maven-01-0.0.1-SNAPSHOT-jar-with-dependencies.

java -jar 命令行中jar的路径有误时,会提示此异常。如果没有写绝对路径,则默认会从当前命令行所在文件夹查找该jar文件,如果jar文件路径不存在,则抛出异常。

这时只需要检查运行当前jar的命令或者脚本,是否使用了相对路径,并且相对路径是否正确。

5. 注意cmd命令传入中文参数乱码

但是此时还有一个问题,就是cmd命令行传入的参数中包含中文时,在main函数中取到的就是乱码了,搜了下发现网上有人说在批处理命令里面添加chcp 65001,发现用了之后不好使。最后还是直接在main方法里面,对输入的参数重新UTF-8编码:arg.getBytes(),"utf-8"),然后就可以正常显示了。

 public static void main(String[] args) {String arg = "";for (int i = 0; i < args.length; i++) {arg = args[i];try {System.out.println(new String(arg.getBytes(),"utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}System.out.println("Hello World !");}

maven打包可执行的jar包-包含依赖jar相关推荐

  1. maven打jar包包含依赖

    普通项目maven打jar包,将第三方依赖也打到jar包中,pom.xml添加打包插件 <build><plugins><plugin><groupId> ...

  2. eclipse导出Jar包包含第三方jar包和图片资源

    一.包含图片资源 1.需要将保存图片的文件夹images放入到src文件夹下. 2.在程序中调用访问图片资源时,使用getClass().getResource("-")方法访问. ...

  3. android 生成aar/jar包包含第三方jar包没有第三方jar包怎么办

    前言 最近需要写一个功能包,提供给界面去使用.里面涉及到一个第三方的包,这时候我生成aar/jar包给对方使用的时候,调用不到第三方包的代码,只可以调用我写的类的代码. 问题 我就去网上去寻找,aar ...

  4. tfs java开发需要jar_使用Spring框架开发最少需要哪些jar包,依赖jar包有哪些?

    展开全部 最少需要11个jar包,分别是:spring-context.jar commons-logging.jar aspectjrt.jar spring-core.jar aspectjwea ...

  5. 如何通过maven打包可执行jar包

    一.目的 介绍将代码打包成jar包的四种形式: 只打包本项目的代码,不包括依赖的jar包,并且不可直接通过java -jar xxx.jar执行(应用场景:我们日常使用依赖的jar包) 只打包本项目的 ...

  6. Maven打包可执行jar包方法大全(史上最全)

    目录 打包方法 方法一:使用maven-jar-plugin和maven-dependency-plugin 方法二:使用maven-assembly-plugin (推荐) 方法三:使用maven- ...

  7. [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...

    作者:chenzhou123520 出处:http://chenzhou123520.iteye.com/blog/1706242 使用 maven 插件 maven-shade-plugin 对 j ...

  8. Spring Boot Maven 打包可执行Jar文件!

    Maven pom.xml 必须包含 [plain] view plaincopy <packaging>jar</packaging> [html] view plainco ...

  9. IntelliJ IDEA-打包war包或jar包(包含Maven方式)

    打工具包jar(普通项目) 什么是工具包呢? 就是其他项目需要依赖我们的某些类或者方法,那么我们就需要将当前的项目打成工具包放入到目标项目里 然后apply->ok 之后我们就可以开始编译jar ...

最新文章

  1. springboot+springsecurity+mybatis plus注解实现对方法的权限处理
  2. luogu4159 迷路 (矩阵加速)
  3. java局部刷新session过期_Ajax局部页面刷新和History API结合的陷阱
  4. JAX-RS 2.x与Spring MVC:返回对象列表的XML表示
  5. html支持的脚本语言,能不能让日志内容在支持html语言的同时支持一下脚本语言,拜托!拜托!...
  6. NYOJ-769乘数密码,逆元解法;
  7. lj245a引脚功能图_干货|教你如何看懂单片机时序图
  8. pythonturtle库填充_Python turtle库学习笔记
  9. 韦根协议c语言,基于STM8系列的韦根协议门禁源代码 1.STM8系列开发源代码; 2.已做门禁开发:韦根协议刷卡门禁控制源代码; - 下载 - 搜珍网...
  10. 为什么成功启动ngnix之后还是无法用ip地址访问网站
  11. (4.5.5.6)Espresso的进阶: IdlingResource
  12. java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题
  13. 快速学会如何在linux上用户环境变量和系统环境变量
  14. 【开发教程11】疯壳·开源蓝牙心率防水运动手环-整机功能代码讲解
  15. 01组团队项目-Beta冲刺-1/5
  16. python3.8 百度网盘下载
  17. seo必备网站分析工具,关键词百度搜索结果查询导出源码
  18. Conflux 研究院 | 《Conflux 协议规范》(黄皮书)导读
  19. 一位IT新人对工作计划的心得体会
  20. 颜色聚合向量(CCV)

热门文章

  1. 斗战神服务器正在维护6,斗战神什么时候服务器数据互通_斗战神1月6日、8日服务器数据互通公告_快吧游戏...
  2. 谷歌X最新开源任务驱动的类级别机器人抓取CaTGrasp!
  3. 美国证监会暂停香港设立的区块链公司的股票交易
  4. java贪吃蛇博客带图片_java课程设计--贪吃蛇小队博客
  5. avi格式媒体文件介绍
  6. idea2023闪退原因
  7. 在mac上进行运行flutter项目
  8. 我研究我自己!苏炳添博士重磅论文:我怎么跑这么快?
  9. lisp角度转换弪度_角度和弧度换算(角度和弧度怎么换算)
  10. 一个精壮的代购骗子被我用Python彻底征服了