IDEA对使用了第三方依赖jar包的非Maven项目打jar包

栏目: IT技术 · 发布时间: 3年前

内容简介:首先需要配置首先新建一个文件夹,文件夹取名为

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

2、具体的打包流程:

2.1、首先配置 MANIFEST.MF

首先需要配置 MANIFEST.MF , 因为这会在打包时使用的;

首先新建一个文件夹,文件夹取名为 META-INF , 在文件夹META-INF中创建文件,取名为 MANIFEST.MF ,然后需要配置下 MANIFEST.MF 文件的内容; 内容如下:

Manifest-Version: 1.0
Class-Path: lib/log4j-core-2.0-rc1.jar lib/bcprov-jdk15on-1.54.jar 
Main-Class: com.lyl.Test.PackageTest

注意上面 MANIFEST.MF 配置文件中的内容在填写时,需要注意几点:

1、Class-Path 在 冒号后面需要有 一个空格 ;然后后面跟随的每个依赖包之间也必须有 一个空格 ,并且最后一个依赖后面也必须要存在 一个空格

2、Main-Class这一行后面需要跟 两个空行

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

最后简单说下,MANIFEST.MF 在打包时起到什么作用呢:

  1. Main-Class 指定程序的运行入口,这样可以直接用java -jar xxx.jar来运行程序。

  2. Class-Path 指定依赖jar包的路径,class loader类加载器会依据这个路径来搜索依赖的class。

2.2、具体配置过程

下面将进行打包前的一些配置,需要将这些配置好后,才能进行打包的;

(1)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(2)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(3)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(4)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(5)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(6)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(7)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(8)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

2.3、进行打包

上面将打包前的一些配置完成后,最后就可以直接进行打包了;

(1)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

(2)、

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

end, IDEA 打jar包流程已经完成了;但是打好的jar包,直接使用时,可能还会存在问题,再聊聊会出现的问题。

扩展: 如果想在打jar包时,将依赖的第三包jar包打进去的话,使用IDEA可能会比较繁琐,但是使用 Eclipse 会比较方便快捷,直接使用 Eclipse 的 fat jar 插件 进行打包,十分方便的。

3、打好的jar包在使用时可能存在的问题:

3.1、报错:Invalid signature file digest for Manifest main attributes

将打好的jar包引用到另一个项目中,可能会报错:Invalid signature file digest for Manifest main attributes ;

这就是因为 打好的jar包中 存在多余的.SF文件,可以将jar包中后缀为 .SF文件删除就可以了。

3.2、报错:JCE cannot authenticate the provider BC

在项目中使用打好的jar包,可能会报错:JCE cannot authenticate the provider BC ;

这是因为 之前打包时,项目中依赖的第三方jar包中有存在 签名 的jar包( bcprov-jdk15on-1.54.jar );在将其打进jar包时,就会将签名破坏掉,导致在使用这个签名被破坏的包中的类时,就会报错了。

3.3、解决方案:

3.3.1、将签名包放一份到本地JDK中(不推荐)

此方案需要将签名包( bcprov-jdk15on-1.54.jar )放到 JDK 中的 jre 中的lib文件夹下的 ext 文件夹中;

例如:本地安装的JDK路径为 E:\Java\jdk1.8.0_60\jre\lib\ext ; 将签名包放到这里一份 。

但是此解决方案不推荐,为什么不推荐呢?

因为如果你打的jar包需要提供给别人的话,别人为了使用你的jar包,还需要改变自己的JDK,这个不太方便了。

3.3.2、打包时,不讲依赖签名包打进去(推荐)

打包时,不将签名包打进去。打好包后,在项目中使用时,需要将依赖的签名包与打好的包一起放到 lib 文件夹下,这样在使用签名包时,就会使用与 打好的包在同级别下的 依赖的签名包。

使用这种方案进行解决时,会比第一种方案方便很多,只是使用时,除了引入打好的jar包外,还需哟再引入下使用到的签名包( bcprov-jdk15on-1.54.jar ),并将其放到同一级别目录下 即可。

打包时,不将签名包打进去的实现步骤:(以 bcprov-jdk15on-1.54.jar 签名包为例子)

(1)、首先是将 MANIFEST.MF 配置文件进行修改:

之前:存在签名包的

Manifest-Version: 1.0
Class-Path: lib/log4j-core-2.0-rc1.jar lib/bcprov-jdk15on-1.54.jar 
Main-Class: com.lyl.Test.PackageTest

修改:就是将签名包 bcprov-jdk15on-1.54.jar 的依赖引入删除

Manifest-Version: 1.0
Class-Path: lib/log4j-core-2.0-rc1.jar
Main-Class: com.lyl.Test.PackageTest

(2)、改完 配置文件后,再修改上面打包 具体配置步骤 中的 第(7) 中的引入依赖jar包,将签名包删除,然后再点击OK,并重新打包 即可。如下图:

之前,签名包也引入了:

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

之后,去掉引入的签名包:

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

重新打好的包,由于没有将依赖的签名包打进去,那么如果使用到签名包bcprov-jdk15on-1.54.jar的类时,就会报《 类找不到 》怎么办呢?

可以将打好的jar包 “ packagetest-1.0.0.jar ”, 与 签名包 bcprov-jdk15on-1.54.jar 放到引用的项目的 lib 文件夹下(需要保证这两个jar包在项目中的存放的位置在同一级别 即可); 然后在使用时就会使用 外部引用的 依赖签名包中的类了,不会报 类找不到

并且没有破坏签名包的签名,所以也不会报签名被破坏的错了:JCE cannot authenticate the provider BC

end, 暂时只找到了这两种解决方案,感觉这都不是最优的解决方案,但是实在找不到了,唉,如果有知道的朋友,可以告诉下吗? 谢谢啦!

IDEA对使用了第三方依赖jar包的非Maven项目打jar包

❤不要忘记留下你学习的足迹 [点赞 + 收藏 + 评论]嘿嘿ヾ

一切看文章不点赞都是“耍流氓”,嘿嘿ヾ(◍°∇°◍)ノ゙!开个玩笑啦,动一动你的小手,点赞就完事了,你每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Reality Is Broken

Reality Is Broken

Jane McGonigal / Penguin Press HC, The / 2011-1-20 / USD 26.95

Visionary game designer Jane McGonigal reveals how we can harness the power of games to solve real-world problems and boost global happiness. More than 174 million Americans are gamers, and......一起来看看 《Reality Is Broken》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具