文章目录
- 前言
- 1. 打包 jar 包流程
- 2. 可能遇到的问题
- 2.1 MANIFEST.MF 文件已经存在报错
- 2.2 已经删除的 jar 包配置再次打开时依然存在
前言
最近在了解 Java Agent 探针技术,在做 demo 的时候需要把代码打包成 jar 包,然后通过 java -javaagent:xxx -jar xxx
命令启动才能测试代码是否正确修改了字节码,因此有了这篇文章
1. 打包 jar 包流程
- 首先直接点击图示位置(也可以点击File --> Project Structure),打开项目结构配置
- 在打开的界面选择 Artifacts,点击加号
+
--> 选择 JAR–> 选择 From modules with depenencies 新建 jar 包配置 - 新建 jar 包配置界面如下所示,其中从上往下红框标记的都是需要注意的
- 首先选中需要打包的 Module,也就是对应模块
- 选中该模块中的主类,点击文件夹图标会自动检测这个模块中存在的主类,选择即可
- 选择选中模块依赖的第三方 jar 包在新的 jar 包中的存在形式,主要有两种选择:
1.extract to the target JAR
:把模块依赖的 jar 包解压,将其内部包含的 class 文件直接合并到目标 jar 文件中。这种方式打包出来的 jar 文件通过 IDEA 查看,会发现其内部不仅包含我们指定的模块的源文件夹,也包含了依赖的 jar 包中的文件夹
2.copy to the output directory and link via manifest
: 将模块依赖的 jar 包直接打包进目标 jar 包内,第三方 jar 包依然独立存在。这种方式需要指定第三方 jar 包在目标 jar 包中的Class Path
,否则程序启动时无法正确处理依赖- 选择一个创建
MANIFEST.MF
文件的文件夹,如果该文件夹下已经有MANIFEST.MF
文件了则会在点击 OK 完成配置时报错,原因及解决方式见下节2.1 MANIFEST.MF 文件已经存在报错
- 基本配置完毕则进入下一步,界面如下所示
- 左侧选中新建的 jar 配置,右侧红框处都是可以修改的部分,如
Name(jar 配置名称)
,Output directory(打包出的 jar 包的存在文件夹)
Available Elements(可用元素)
用于选择需要打包进 jar 包中的文件,双击该选项下文件夹中的文件即可将其添加到 jar 包中- 最后
Class Path
用于配置目标 jar 包中依赖的 jar 包,如果在上一个步骤中选择了copy to the output directory and link via manifest
则一定要配置,配置值为依赖 jar 包在目标 jar 包中的相对路径,否则省略
- 配置完成,就会在上文步骤3第四步指定的文件夹中创建一个
MANIFEST.MF
文件,打开该文件可以进行相关配置,比如笔者的配置如下,可以根据自身模块情况做修改 - 最后一步,点击Build–>Build Artifacts,在弹窗中选中目标 jar 包配置,然后在其右侧弹框中选择 Build 或者 ReBuild点击即可进行编译打包。打包完成后,可以在步骤4配置的
Output directory(打包出的 jar 包的存在文件夹)
中找到目标 jar。笔者以extract to the target JAR
方式处理第三方 jar 包,可以看到其依赖的 jar 包中的文件都合并到了目标 jar 包中 - 启动目标 jar 包,只需要在终端中执行
java -jar
命令即可。以笔者为例,启动命令为
java -jar /Users/xxx/workspace/demo/out/artifacts/src/src.jar
2. 可能遇到的问题
本节记录在打包过程中遇到的问题,给自己做个笔记,也希望读者可以避免踩坑
2.1 MANIFEST.MF 文件已经存在报错
这个错误会在新建 jar 包配置时发生,具体如下截图。其实错误信息已经写的很明白,就是在这个目录下 MANIFEST.MF 文件已经存在
。一开始遇到这个错误可能会摸不着头脑,因为一般在 eclipse 下打包 jar 都需要我们手动创建 MANIFEST.MF 文件,而 IDEA 其实会自动帮助使用者创建 MANIFEST.MF 文件,当指定文件夹下已经有 MANIFEST.MF 文件则会报出这个错误。一般解决方法如下:
- 指定另一个文件夹作为 MANIFEST.MF 文件存在目录
- 将原文件夹下的 MANIFEST.MF 文件删除
自动创建的 MANIFEST.MF 文件不符合要求的时候,只要用户继续修改这个文件即可
2.2 已经删除的 jar 包配置再次打开时依然存在
这个问题的表现为已经点击了 -
按钮,删除了一个命名为 src的 jar 配置,但是再次打开该界面的时候这个配置又出现了
这个问题产生原因很简单,IDEA 会将创建过的 jar 配置缓存在 .idea 文件夹中,只要找到该文件夹,删除对应的 xml 文件即可,如下图所示