在java工程打包的过程中遇到过不少问题,现在总结一下。一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便;另一种是依赖了本机jar包(不能通过pom.xml指定),我目前实践结果是只能手动进行打包。

1、依赖的jar包全由pom文件指定

使用maven的assembly插件进行打包,需要在pom文件中进行插件配置。基本配置如下,在终端中执行mvn package,即可在target目录生成名字为{artifactId}-jar-with-dependencies.jar 的jar文件,该jar文件中包含了所有依赖的jar包(解压后的)。

该插件还有很多其他的高级设置,每每总是搞错,后面等自己摸透了,会慢慢增加一些高级设置的说明。

 <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.5</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><mainClass>com.sym.storm.WordCountTopology</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>

最终生成的jar包中的依赖的jar包都是解压后的,这是由jar-with-dependencies的默认设置决定的。若需要保持依赖的jar包不解压,则需要进行一下设置:

  • 新建src/main/assembly目录,并在其中新建src.xml文件,并在该文件中写入如下内容:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">  <id>jar-with-dependencies</id>  <formats>  <format>jar</format>  </formats>  <includeBaseDirectory>false</includeBaseDirectory>  <dependencySets>  <dependencySet>
      <unpack>false</unpack>  <scope>runtime</scope>  </dependencySet>  </dependencySets>  <fileSets>  <fileSet>  <directory>${project.build.outputDirectory}</directory>  </fileSet>  </fileSets>
</assembly>  

默认的unpack设置是true(即解压),只需要修改为false即可。

  • 然后需要将之前pom文件中的descriptorRef替换为如下descriptor设置。再执行mvn package命令。解压生成的jar包,可看到依赖的jar包都是未解压的。
  • <descriptors><descriptor>jar-with-dependencies</descriptorRef>
    </descriptors>

2、依赖本地jar包(非pom指定)

之前在网上搜了很多的教程,教程里也有很多是使用assembly插件来,但实践之后都未果,后来只能用最原始的手动导jar包的方式来实现。

  • 用编辑器导成jar包(eclipse和intellij不同)。Main方法根据实际需求来指定。
  • 修改MANIFEST.MF。MANIFEST.MF文件描述了jar包的相关信息,包括jar包的版本、创建人和类搜索路径等。如果是可执行jar包,会包含Main-Class属性,表明Main方法入口。Class-Path指定依赖的jar包,当前路径是jar包所在目录,若要引用当前目录下一个子目录中的jar包,使用以下格式:子目录/jar包名称,多个jar包之间用空格分隔,在任何平台上路径分割符都是'/'。

具体操作如下:在导出的jar包上右键,选择用WinRAR打开,进入META_INF目录,打开MANIFEST.MF文件,添加依赖的jar包的名字,名字之前用空格分隔,如

Class-Path: lib/***1.jar lib/***2.jar

转载于:https://www.cnblogs.com/yaminLearn/p/6273972.html

java工程打成jar包 - 使用maven assembly插件打包及手动打包相关推荐

  1. idea将java项目打成jar包

    一.idea将java项目打成jar包(非maven方式) File -->Project Structure -->Artifacts --> Jar --> From mo ...

  2. Eclipse中将java类打成jar包形式运行

    记录一次帮助小伙伴将java类打成jar包运行 1.创建java project项目 file > new > project > java project 随便起一个项目名称,fi ...

  3. 将java文件打成jar包

    新建一个配置文件mainfest.mf 设置内容Main-Class: Str2CamelCaseStr 把配置文件放到编译好的java文件 xxx.class同目录下面 到当前目录打开命令窗口 执行 ...

  4. 一步一步教你将java代码打成jar包用bat批处理命令运行

    1.背景 前不久接到一个朋友的请求,让我帮他做个小程序处理一些工作上的事情,好歹作为java开发工程师,这点忙还是要帮的.不过马上遇到了一个问题,平时我们都是用IDEA或者eclipse运行的代码, ...

  5. Java项目打成Jar包后执行Jar包指定方法

    最近在考虑跳个槽的问题,也看了几个面试,其中有一个面试让我本地写一个蛇形矩阵,打成Jar包,并且可以使用java -jar 命令启动,本人基础不太牢固,这个问题我找了半天才找到解决的办法,面试题答完直 ...

  6. “java程序打成jar包 如何处理第三方jar包”

    eclipse的export的 runnable jar file 导出的jar包的形式应该可以避免这个问题,直接想所依赖的jar里的class文件也一并打入jar包里了. 问题一: 现在有一j2se ...

  7. 命令行把java项目打成jar包

    工作中需要把jenkin-client项目打成jar包使用. 以下为在命令行用jar命令打包,记录一下: 切换到项目路径,执行 jar cf  jenkin-client.jar  java-clie ...

  8. vue与java一起打成jar包,前端与后端一起打成jar包

    我这里就不把打包的具体过程列举出来了 Vue打包完成后是一个dist文件夹,可能你的文件名与我不一样,但不影响 如图所示:这是你打好的包,在文件夹中显示的样子 需把index.html入口文件放在sr ...

  9. java文件打成jar包

    cmd命令打jar包: 老规矩,先打开黑窗口.如下: 打"jar",然后回车,就能看见JDK给我们提供打jar的一些字母的含意.下面还提供了一个示例. 在打jar之前,必须找到你j ...

最新文章

  1. 第四章函数作业题,函数模板
  2. 使用最新目标跟踪框mmtracking实现自己的目标跟踪项目
  3. Oracle session解释
  4. Rails non browser app高级篇-capistrano/daemon部署
  5. ios 百度地图指定区域_ios百度地图的使用(普通定位、反地理编码)
  6. WinCE下的GPIO中断的处理
  7. 规划系统_智慧水务规划系统思维的设计思考
  8. springboot 分页查询参数_精通SpringBoot--分页查询功能的实现
  9. 赠书 | 数据库怎么选择?终于有人讲明白了
  10. Windows Phone 7 Tips (6)
  11. 2016最新php授权验证系统v2.1,2016PHP受权验证系统V2.1完整版,域名+IP双重验证 一键升级受权系统 完美无错...
  12. 2021-02-05
  13. TreeView的使用方法
  14. 2021年全国大学生电子设计大赛(一)赛题解析与预测
  15. AD域实现统一用户管理
  16. ioctrl原形 linux_Linux常见的几种用户态与内核态交互方式优缺点
  17. oauth2 出现 cannot be cast to .security.oauth2.provider.authentication.OAuth2AuthenticationDetails
  18. 透彻理解机器学习中极大似然估计MLE的原理(附3D可视化代码)
  19. 双旗科技亮相2010年上海国际数字标牌展
  20. Java实现简单的日历打印

热门文章

  1. position的四种属性
  2. C++调用matlab编程
  3. 程序员如何跳出35岁魔咒,史上最全思维图收集解救你
  4. java Base64转码传图到C#
  5. 赛门铁克:业务整合才是正道,并非一心二用
  6. Mysql 架构及优化之-索引优化
  7. 输入控件tagsinput
  8. 敏捷软件开发实践-Sprint Status Track
  9. Jsp Spring Security 权限管理系统
  10. 爆牙齿的世界杯日记(阿根疼啦)