我正在使用eclipse indigo创建一个可运行的jar,我遇到了两个选项:
Extract required libraries into generated jar
和
Package required libraries into generated jar
虽然使用first选项创建只生成了包含应用程序包和META-INF
包的jar文件,但第二个选项也创建了一个org
包。
这个org
包的子文件夹进一步扩展为org> eclipse> jdt> internal> jarinjarloader
。 jarinjarloader
包中包含了一些我以前从未见过的类。
这是我在第二个选项中的清单文件:
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: main.SimpleCalculator
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
main
是我的应用程序包,SimpleCalculator
是我的主要类。
我的问题是:
1)这两个选项如何不同以及第二个选项添加的这些新类是什么?第二个选项清单中的不同名称 - 值对是什么?
2)另外,不可运行的jar和可运行的jar之间是否有任何区别,除了它们的清单文件允许runnable变为可执行文件。 (我发现在创建一个不可运行的jar文件的同时在我的项目中指定main-class的选项,所以我在这里遗漏了一些东西,或者只是eclipse尝试额外帮助?)
注意:我对这两个选项有一些猜测,但它们就是......猜测!
提前Thanx!
答案 0 :(得分:2)
1)这两个选项有何不同?
What is the difference between runnable jar library handling options?
2)第二个选项添加的这些新类是什么?
org
包适用于jar-in-jar-loader。使用package option
它将变成胖罐,你的主要类不再是真正的主要,在这种情况下看清楚。
来自Ant,但你明白了吗?
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
<attribute name="Rsrc-Main-Class" value="YourRealMainClass"/>
3)另外,除了清单文件之外,不可运行的jar和可运行的jar之间有什么区别吗?
我不这么认为,但是从Eclipse导出非runnable jar你可以指定要包含的文件而不是更灵活。
答案 1 :(得分:2)
第一个问题的答案是,第一个选项提取依赖类文件和资源,然后将它们打包到您的jar文件中,您需要注意使用此选项的许可证问题
至于第二个选项,它只包装,即:将jar文件按原样添加到jar文件中,并通过MANIFEST引用它们。
还有一个用于创建可运行jar文件的选项,它将所有依赖jar文件放在与项目的runnable jar相邻的文件夹中,并在MANIFEST中包含对该文件夹中jar的引用。
你的第二个问题的答案是,eclipse试图通过使用你的运行时配置让生活变得更容易,这样你就可以根据你选择的任何配置创建一个可运行的jar。您可以通过手动创建包含主类的MANIFEST来创建可运行的jar。