构建包含其所有依赖项的JAR

这可能是一个非常基本的问题,但我担心我对Java知之甚少,我无法在任何地方找到答案。

我正在尝试构建一个依赖于TFS SDK的Ant库。 我按照指南设置项目,但当我将其导出为JAR并尝试使用ANT运行任务时,我收到以下错误:

java.lang.NoClassDefFoundError: /com/microsoft/tfs/core/util/TFSUser 

我意识到我可以将TFS SDK JAR放在我的ANT lib文件夹中,但是如果可能的话,我希望我的JAR能够包含它并且库只需要工作而不必这样做。

这个答案似乎说可以包含使用Eclipse运行所需的所有资源(我使用3.7.2),但它没有详细说明如何实际执行它。 Eclipse中有什么选项可以做到这一点?

在导出时选择“将所需库提取到生成的JAR”。

将所需的库提取到生成的JAR中

在导出时选择“将所需库提取到生成的JAR”。

使用File – > Export – > Java – > Runnable JAR文件,而不是Eclipse。

“将所需的库提取到生成的JAR中”应该是您所需要的。

当你构建一个jar时,你会得到一个只包含你的代码的JAR,而不是你需要的任何依赖项。 您可以使用jarjar之类的东西将所有依赖项合并到一个易于管理的Jar文件中,或者将所有依赖JAR复制到一个文件夹中以便于使用。 看起来Eclipse也有选择来做这种事情(见上面的post)。

另一种选择是使用依赖管理系统,如Maven或Ivy 。 这有一个更高的学习曲线,但对于一个库来说它是值得的,因为它将允许您的库的用户轻松获取所有依赖项。 对于最终用户应用程序,单个可分发可能是更好的选择(您可以使用Maven或Ivy在内部管理依赖项,然后使用jarjar或Java Web Start分发给最终用户)。

您需要依赖清单文件中的classpath属性。 这解释了如何使用Ant将库打包到我的jar中

以防你是否正在使用maven。 您需要包含以下插件。

  org.apache.maven.plugins maven-assembly-plugin 2.4   jar-with-dependencies    listener com.example.TestProgressListener      make-assembly  package   single     

阅读更多@ 如何构建具有依赖关系的JAR文件?