繁体   English   中英

我可以调用另一个jar文件中的jar库中的类文件吗?

[英]Can I call class files that are within a jar library located in another jar file?

我正在尝试访问打包为库的类文件,但是不幸的是,jar库应该打包在另一个jar文件中。

例如,我有一个包含一些类库的a.jar。 我可以从外部Java应用程序调用(导入)jar文件中的类。 现在,我需要将此a.jar放入另一个名为b.jar的jar中,并需要从b.jar外部访问(导入)a.jar中的类。

这不是我想做的事情:)

您将必须编写一个能够处理“罐中罐”的类加载器。 对我来说,这听起来像个坏主意。

不要合并jar文件-只需将它们分别放在磁盘上即可。 我知道你可能需要说服有更多文件的必要性的管理,但它确实是打算让一切变得简单许多 编写类加载器并非易事...

也许我不太了解,但是我相信您想要的是与您的类路径上的另一个JAR文件一起执行程序。

假设您在A.jar中有一些核心,在B.jar中有一些库。 您可以这样执行程序(在Windows上用;替换:):

java -cp A.jar:B.jar main.class.Name args

其中main.class.Name是您的主类名称,而args是您所有命令行参数所在的位置。

您也可以像这样在manifest.mf Main-ClassClass-Path属性:

Class-Path: B.jar
Main-Class: main.class.Name

然后,您可以像这样执行程序:

java -jar A.jar args

实话实说,我曾经认为将我的应用程序作为单个JAR文件分发是很麻烦的,所有依赖项都提取并包装在一个巨型JAR文件中。 问题是,某些应用程序最终有相当多的依赖关系,每次我做了一个改变我的代码的时间,这也意味着我不得不分发所有相关的代码,甚至什么也没有依赖关系发生了变化。 这意味着即使可能只有很小的更改,也要分发巨大的JAR文件。

通过使用Class-Path清单属性,我可以分发可以以与单个JAR文件完全相同的方式执行的应用程序(在某些系统上双击或简单的“ java -jar ”咒语),但可以节省大量通过不传输所有重复的库和后续软件版本来节省时间和带宽。

也可以将任何依赖的JAR放入其自己的目录(现在将其称为lib )并修改Class-Path以使所有JAR路径都看起来像“ lib/B.jar ”。 这样一来,您的主程序目录就不会包含许多小JAR文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM