文章目录

  • 前言
  • 1. 打包 jar 包流程
  • 2. 可能遇到的问题
    • 2.1 MANIFEST.MF 文件已经存在报错
    • 2.2 已经删除的 jar 包配置再次打开时依然存在

前言

最近在了解 Java Agent 探针技术,在做 demo 的时候需要把代码打包成 jar 包,然后通过 java -javaagent:xxx -jar xxx 命令启动才能测试代码是否正确修改了字节码,因此有了这篇文章

1. 打包 jar 包流程

  1. 首先直接点击图示位置(也可以点击File --> Project Structure),打开项目结构配置

  2. 在打开的界面选择 Artifacts,点击加号+ --> 选择 JAR–> 选择 From modules with depenencies 新建 jar 包配置

  3. 新建 jar 包配置界面如下所示,其中从上往下红框标记的都是需要注意的

    1. 首先选中需要打包的 Module,也就是对应模块
    2. 选中该模块中的主类,点击文件夹图标会自动检测这个模块中存在的主类,选择即可
    3. 选择选中模块依赖的第三方 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,否则程序启动时无法正确处理依赖
    4. 选择一个创建 MANIFEST.MF 文件的文件夹,如果该文件夹下已经有 MANIFEST.MF 文件了则会在点击 OK 完成配置时报错,原因及解决方式见下节 2.1 MANIFEST.MF 文件已经存在报错

  4. 基本配置完毕则进入下一步,界面如下所示

    1. 左侧选中新建的 jar 配置,右侧红框处都是可以修改的部分,如 Name(jar 配置名称)Output directory(打包出的 jar 包的存在文件夹)
    2. Available Elements(可用元素) 用于选择需要打包进 jar 包中的文件,双击该选项下文件夹中的文件即可将其添加到 jar 包中
    3. 最后 Class Path 用于配置目标 jar 包中依赖的 jar 包,如果在上一个步骤中选择了 copy to the output directory and link via manifest 则一定要配置,配置值为依赖 jar 包在目标 jar 包中的相对路径,否则省略

  5. 配置完成,就会在上文步骤3第四步指定的文件夹中创建一个MANIFEST.MF 文件,打开该文件可以进行相关配置,比如笔者的配置如下,可以根据自身模块情况做修改

  6. 最后一步,点击Build–>Build Artifacts,在弹窗中选中目标 jar 包配置,然后在其右侧弹框中选择 Build 或者 ReBuild点击即可进行编译打包。打包完成后,可以在步骤4配置的Output directory(打包出的 jar 包的存在文件夹) 中找到目标 jar。笔者以 extract to the target JAR 方式处理第三方 jar 包,可以看到其依赖的 jar 包中的文件都合并到了目标 jar 包中

  7. 启动目标 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 文件则会报出这个错误。一般解决方法如下:

  1. 指定另一个文件夹作为 MANIFEST.MF 文件存在目录
  2. 将原文件夹下的 MANIFEST.MF 文件删除

自动创建的 MANIFEST.MF 文件不符合要求的时候,只要用户继续修改这个文件即可

2.2 已经删除的 jar 包配置再次打开时依然存在

这个问题的表现为已经点击了 - 按钮,删除了一个命名为 src的 jar 配置,但是再次打开该界面的时候这个配置又出现了

这个问题产生原因很简单,IDEA 会将创建过的 jar 配置缓存在 .idea 文件夹中,只要找到该文件夹,删除对应的 xml 文件即可,如下图所示

IDEA 打包 jar 包记录相关推荐

  1. cmd打包jar包并运行详解

    今天搜索了很多关于cmd打包jar包并运行的文章,但是感觉都不是太清楚,现在弄明白了一些(至少能用了),在这里记录一下: 主要用到以下3条指令 1.编译java文件 javac -d ./ xxx.j ...

  2. android 打包jar包

    昨天,自己用到别人的jar包的内容,后来,公司要求在之前的基础上增加几个功能,所以需要修改jar包的内容.别人的源代码给了我,我修改后进行打包成jar包.不过自己却不会用android studio ...

  3. 打包jar包时文件读取和第三方jar包的问题

    本人自己遇到的问题.自己写的一个项目,想要打包成jar包放在定时器里去调用,遇到了如下问题 1.xml文件和properties文件读取问题 2.第三方jar包读取不到 解决方案: 1 我是在读取xm ...

  4. MapReduce打包jar包并运行的步骤操作以及重要的注意事项

    目录 一.打包jar包以及上传的步骤 在eclipse把mapreduce程序进行打包 通过Xshell把JAR包上传到linux 二.执行jar包的注意事项 出现jdk版本异常的问题 情况描述 原因 ...

  5. IDEA中MAVEN项目如何打包JAR包

    这篇文章主要为大家展示了"IDEA中MAVEN项目如何打包JAR包",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"IDEA中M ...

  6. SpringBoot:springboot项目打包jar包

    pom.xml:加入依赖,插件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...

  7. k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包

    一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...

  8. 使用Ant实现打包jar包上传到服务器

    在开发过程中,常常需要同步更新服务器上的程序.如果每次都将程序重新打包,然后再登陆服务器进行上传,这样过程显得比较繁琐,特别是更新步骤较多时,很容易出错.我们可以通过Ant来实现打包和上传过程,如果是 ...

  9. SpringBoot项目在idea中运行正常,打包jar包后运行报NoClassDefFoundError和UnsatisfiedDependencyException解决方案...

    SpringBoot项目在idea中运行正常,按照网上的方式打成jar包后在控制台运行报错. 第一个错误: 2018-09-06 09:38:35,222 ERROR (SpringApplicati ...

  10. IDEA打包jar包(打包可运行jar,外部引用jar包版)

    参考地址:https://blog.csdn.net/dufufd/article/details/71126571 idea中将java项目中的单个类打包成jar包 参考地址:https://blo ...

最新文章

  1. php mysql编译安装目录_Linux下Apache PHP MySQL默认安装路径
  2. Google下重手了!安卓App广告弹窗被打击
  3. rtmp测试地址_超详细搭建多码率测试环境(成为流媒体高手必经之路)
  4. 置信区间估计 预测区间估计_估计,预测和预测
  5. 删除计算机360云盘,win7系统怎么取消电脑右键保存到360云盘选项
  6. java行转列_Java后端面试标准:如何准备一场后端面试?
  7. mysql连接数据库的包_java连接mysql数据库包
  8. Linux Shell笔记2 函数
  9. 查询字符串中子字符串所有出现位置
  10. Matlab读取显示图像顺序
  11. 最好的录屏软件 WebEx Recorder Editor
  12. MFC显示bmp图像
  13. phpQuery中文手册(更新中)
  14. 听听那冷雨 余光中
  15. 解决windows网络代理篡改,浏览器不能上网问题
  16. 前端css解决z-index 上层元素遮挡下层元素的方法
  17. 初学SQL 注入之常见的几种注入类型
  18. 你可以这样学习C语言
  19. 任正非:新荣耀要做华为最强竞争对手;小米集团王嵋因错误表达致歉并请辞;全球 5G 网络三分之一来自中国技术 | EA周报...
  20. 火狐 看网页注释_在Firefox内部(外部)创建注释

热门文章

  1. SUSE Linux 网络配置
  2. window10运行不了1stopt_1stOpt批量处理方程
  3. linux怎么从超级用户切换,linux怎么切换到超级用户
  4. pthread之条件变量pthread_cond_t
  5. 联想电脑如何进入BIOS的方法汇总
  6. 什么是敏捷开发(Scrum)?
  7. matlab simulink教程pdf,Simulink基础入门教程“完整版”.pdf
  8. java程序员必备快捷键
  9. tp6 阿里云短信接口 php
  10. [2022-06-21 完美解决]MacBookPro 2020 M1 开启2k HIDPI