如何从Eclipse导出Java jar并依赖其他jar?

时间:2013-11-05 09:41:39

标签: java eclipse jar export noclassdeffounderror

我正在尝试从Eclipse项目创建一个自包含的.jar文件。 “自包含”是指该项目的所有依赖项(即其他jar)应包含在生成的jar中。我想在另一个项目中使用导出的jar作为库。 问题是我从依赖项中获取了一个类的NoClassDefFoundError。我已经尝试导出一个包含所有依赖项的runnable jar和一个“普通”jar。这些都不起作用。

清单看起来像这样:

Manifest-Version: 1.0
Main-Class: com.path.to.MyMainClass
Class-Path: lib/resolver.jar lib/xercesImpl.jar lib/xml-apis.jar lib/Mac-Cocoa64/swt.jar  

.classpath看起来像这样:

<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="lib" path="lib/resolver.jar"/>
    <classpathentry kind="lib" path="lib/xercesImpl.jar"/>
    <classpathentry kind="lib" path="lib/xml-apis.jar"/>
    <classpathentry kind="lib" path="lib/Mac-Cocoa64/swt.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

缺少的类def来自SWT.jar文件。 知道什么可能是错的或我需要采取什么步骤才能成功导出这个jar,以便它可以包含在其他地方?

干杯,

马丁

3 个答案:

答案 0 :(得分:12)

它可以帮助某人

1.从项目属性中选择导出

1. Select Export from Project Properties

2.选择Runnable Jar选项

2. Runnable Jar option

3.完成JAR创建(在这里,您可以选择将所有依赖项打包到生成的jar中。)

3. Finish the creation.

答案 1 :(得分:2)

我会认真考虑使用Maven或像Gradle这样的类似工具来管理不同项目的依赖关系;将不同的依赖项塞入一个jar中是非常不好的主意,因此您不必再将它们包含在其他项目中;这是依赖地狱,图书馆冲突甚至许可冲突的秘诀。

主应用程序jar清单中该类路径行的存在将表明您所期望的事实上并非顺便发生;依赖项是外部引用的,所以我要猜测这些类不在应用程序jar中。

答案 2 :(得分:0)

回答这个问题:最后,我们决定直接在项目中包含依赖项的jar,避免在jar中使用havign jar。正在考虑使用Mavin,但是我们的项目设置方式需要一些实质性的挑战。