如何将库与我的jar组合?

Dac*_*cto 4 java jar

好的,所以我写了一个程序,利用第三方开源库,我想用我的程序打包在一个罐子里.我正在使用netbeans 6.8,我尝试过的java总是吐出错误:

java.lang.NoClassDefFoundError: libraryname;
Run Code Online (Sandbox Code Playgroud)

关于主题:我也想知道如果可能的话,如何通过netbeans制作可执行jar(exe).(我见过用java编写但是是.exe的程序)

编辑发现了一个名为FatJar的eclipse插件可以做我想要的,但是我找不到类似netbeans的东西,有这样的东西吗?

bel*_*rak 16

我将从强制性免责声明开始:Java可执行JAR不能以这种方式工作.可执行JAR具有在JAR的MANIFEST.MF文件中定义的主类,并且MANIFEST还允许定义类路径以包括可执行JAR中的代码将需要的库.清单中的类路径定义必须枚举所有的JAR或文件夹,把类路径,相对路径是相对于可执行的JAR文件的位置-不包含路径的可执行的JAR文件.使用java可执行文件的"-jar"参数启动可执行JAR,并忽略 java"-cp"标志和CLASSPATH环境变量.至于为什么可执行JAR是以这种方式设计的,你应该知道从JAR中包含的JAR加载类的主要缺点,即使这个回复的其余部分将集中于这样做.

注意:我丢失了完全解释它的原始sun论坛主题,但实质上是因为顶级JAR中的条目可以以随机访问方式读取,但是在访问任何条目之前必须读取整个嵌入式JAR,因为顶级JAR可能已压缩其条目.

我用过One-Jar在过去成功,但最终产生的罐子的结构可能不是你所期望的.基本上,One-Jar类是最终jar中唯一的非JARd类; 所有其他代码(您的代码和任何依赖库代码)作为JAR文件包含在结果中.您的应用程序在最终JAR的"main"文件夹中作为名为"main.jar"的常规JAR文件进行JAR.您的代码所需的任何库都作为JAR文件放在最终的JAR的"lib"文件夹中.最后但并非最不重要的是,最终JAR的MANIFEST.MF文件告诉One-Jar你的主要类是什么.执行是一个简单的"java -jar final.jar [args your app uses]".我不知道如何转换到关于你的非主题问题的操作系统原生EXE的下一步,但最好不要使用与One-Jar不同的包装机制.我不确定如何使用NetBeans,我的建议是使用构建工具来打包最终的jar.幸运的是,One-Jar提供了有关使用Ant生成最终jar的说明,并且应该可以轻松地集成到NetBeans中.

我相信Eclipse FatJar插件会创建一个One-Jar可执行JAR,所以如果该插件看起来像你想要的那样,那么One-Jar就是这样做的方法.就个人而言,我使用了Maven程序集.

有一点需要注意 - 任何需要(或希望)利用Java签名JAR验证的已签名库可能无法正常工作 - 像BouncyCastle这样的Java Cryptographic Extension(JCE)实现是一个值得注意的例子.我认为原因是签名验证针对最终的JAR运行,而不是签名库.幸运的是,One-Jar允许最终用户向类路径添加额外的库,这在运行可执行JAR时明确排除; 为了解决这个问题,你可能最好用最终的JAR和依赖操作系统的启动脚本(.bat,.sh等)交付有问题的JAR.