当前位置:  开发笔记 > 编程语言 > 正文

包含JAR内的JAR的类路径

如何解决《包含JAR内的JAR的类路径》经验,为你挑选了6个好方法。

是否可以指定classpath包含另一个JAR文件中包含的JAR文件的Java ?



1> Steve Moyer..:

如果您正在尝试创建包含应用程序及其所需库的单个jar,则有两种方法(我知道)可以执行此操作.第一个是One-Jar,它使用一个特殊的类加载器来允许嵌套jar.第二个是UberJar(或Shade),它会爆炸包含的库并将所有类放在顶级jar中.

我还要提一下,UberJar和Shade分别是Maven1和Maven2的插件.如下所述,您还可以使用程序集插件(实际上它更强大,但更难以正确配置).


所以我们在5年之后.看起来这仍然是真的.很伤心:(
我现在知道的最好的方法是使用IntelliJ jar工件.它从依赖的jar中提取所有类,并将它们放在一个jar中.
在某些情况下这是不可能的,例如当您使用需要签名的诸如BouncyCastle之类的JCE实现时

2> 小智..:

您不想使用那些"爆炸JAR内容"解决方案.他们肯定会更难看到东西(因为一切都在同一水平爆炸).此外,可能存在命名冲突(如果人们使用正确的包,则不应该发生,但您不能总是控制它).

您想要的功能是25大Sun RFE之一:RFE 4648386,Sun以其无限的智慧指定为低优先级.我们只能希望Sun醒来......

同时,我遇到的最佳解决方案(我希望Sun将在JDK中复制)是使用自定义类加载器JarClassLoader.


实际上几乎可以保证命名冲突会发生在诸如log4j配置和许可证文本之类的事情上.

3> 小智..:

经过一些研究,我找到了不需要maven或任何第三方扩展/程序的方法.

您可以在清单文件中使用"Class-Path".

例如:

创建清单文件MANIFEST.MF

Manifest-Version: 1.0
Created-By: Bundle
Class-Path: ./custom_lib.jar
Main-Class: YourMainClass

编译所有类并运行 jar cfm Testing.jar MANIFEST.MF *.class custom_lib.jar

c代表创建存档 f表示您要指定文件 v是为了详细输入 m意味着我们将传递自定义清单文件

确保在jar包中包含lib.你应该能够以正常方式运行jar.

基于:http://www.ibm.com/developerworks/library/j-5things6/

您在这里找到关于类路径的所有其他信息


这个答案确实*不起作用.来自oracle doc(由上面的banana链接):"Class-Path标头指向本地网络上的类或JAR文件,而不是JAR文件中的JAR文件"
哦,不,它不起作用,一旦我移动`custom_lib.jar`,jar不能再执行:(

4> ecbrodie..:

使用zipgroupfileset标记(使用与fileset标记相同的属性); 它将解压缩目录中的所有文件并添加到新的存档文件中.更多信息:http://ant.apache.org/manual/Tasks/zip.html

这是解决jar-in-a-jar问题的一种非常有用的方法 - 我知道,因为我在搜索这个确切的StackOverflow问题的同时试图弄清楚要做什么.如果你想将jar或jar文件夹打包到你的一个带有Ant的jar中,那么就忘记所有这些类路径或第三方插件,你要做的就是这个(在Ant中):


  ...
  



5> ntg..:

如果你正在使用ant构建(我正在使用eclipse中的ant),你可以通过对ant添加它们来添加额外的jar文件...如果你有一个由多人维护的项目但不是最好的方法对于一个人项目而且很容易.

例如,构建.jar文件的目标是:


    
        
        ................................
        
    

我刚刚添加了一行来制作它:


    
    
        ................................
    

哪里


是与外部罐子的dir.就是这样......



6> Joe Skora..:

不是没有编写自己的类加载器.您可以将jar添加到jar的类路径中,但它们必须位于同一位置,而不是包含在主jar中.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有