Java 工程打包成库需要依赖其它外部库的打包方式

Posted chorm590

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 工程打包成库需要依赖其它外部库的打包方式相关的知识,希望对你有一定的参考价值。

2019-06-14

关键字:Java 打包、jar 打包依赖


 

经常会有将 Java 工程打包成一个 jar 库的形式以供其它工程调用的需求。而我们需要被打包成 jar 库的工程中也难免会有需要依赖外部其它 jar 库的情况。比如,我们自己开发一个通过 HTTP 访问网络资源的工程,这个工程需要解析 XML 文件,我们通常不会自己从零开发 XML 解析的功能,网络上已经有很多现成的 XML 解析 jar 库,直接拿来用就好了。在这种情况下,我们自己的 HTTP 访问网络资源工程在开发好以后,如果直接以普通的方式打包成 jar 库,在其它工程中引用时,是会报错的,会报一个 XML 解析相关的类找不到的异常。发生这种情况的原因就是我们的普通 jar 打包方式不会将工程中的库依赖也打包进去。

 

那怎么解决呢? 其实很简单。下面以 eclipse 中构建的工程为例进行讲解。

 

step 1

在该工程右键,选择导出工程。

技术图片

 

step 2

在弹出的对话框中选择 JAR file

技术图片

 

step 3

再在弹出来的对话框中勾选一些信息,一定要注意哪些能勾哪些不能勾。按照下图所示来即可

技术图片

 

step 4

直接下一步

技术图片

 

step 5

这一步需要注意,这里我们必须手动指定一个 MANIFEST.MF 文件,这份文件内部记载了我们的其它第三方 jar 库的依赖路径关系。

技术图片

至于这个 MANIFEST.MF 文件的内容,则如下所示

Manifest-Version: 1.0
Class-Path: libs/jackson-annotations-2.9.9.jar libs/jackson-core-2.9.9.jar libs/jackson-databind-2.9.9.jar

重点内容就是上面的 Class-Path 项,这项的值填的就是你的外部库的相对路径,多个库之间以空格隔开。

 

需要注意的是,这些第三方的 jar 库也需要一起放到新的工程对应目录下。就是说,这些外部的 jar 库仍然不会一起打包进你自己的 jar 库里去。在你后面要引用你自己打包的 jar  库时,这些外部库也需要一并放进对应目录。

 

step 6

导出完成。

 

然后在使用方面。假设我们经过前面的步骤已经成功导出了一个名为 japi.jar 的库文件。这个时候我们新建了一个工程 japi_client_test 工程,将这个 japi.jar 作为外部库引入。

 

那么,正确的库文件结构应该如下图这样

技术图片

在前面的 MANIFEST.MF 中我们有填到 3 个外部库,它的依赖路径为

1、libs/jackson-annotations-2.9.9.jar

2、libs/jackson-core-2.9.9.jar

3、libs/jackson-databind-2.9.9.jar

 

 所以在这里,也必须将这 3 个第三方的 jar 库放入到一个 libs 目录下,与我们的 japi.jar 具同等地位。

 

最后,还不能忘记要将它们都添加到新工程的外部依赖库路径中去,如下图所示

技术图片

 

如此一来,便大功告成了。 

 


 

以上是关于Java 工程打包成库需要依赖其它外部库的打包方式的主要内容,如果未能解决你的问题,请参考以下文章

maven的两种可运行jar打包方式。1内置依赖,2外部依赖。

求教java maven项目打包引入的问题,求大神解答

减少打包组件vue.config.js——Webpack的externals的使用

Maven项目依赖外部jar进行打包的两种方式

maven的三种项目打包方式----jar,war,pom

解决Python开发过程中依赖库打包问题的方法