[英]Create Executable Jar that includes all the dependencies as packaged jars
[英]Building JAR that includes all its dependencies
这可能是一个非常基本的问题,但我担心我对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”。
使用File - > Export - > Java - > Runnable JAR文件,而不是Eclipse。
“将所需的库提取到生成的JAR中”应该是您所需要的。
当你构建一个jar时,你会得到一个只包含你的代码的JAR,而不是你的Jar需要的任何依赖项。 您可以使用jarjar之类的东西将所有依赖项合并到一个易于管理的Jar文件中,或者将所有依赖JAR复制到一个文件夹中以便于使用。 看起来Eclipse也有选择来做这种事情(见上面的帖子)。
另一种选择是使用依赖管理系统,如Maven或Ivy 。 这有一个更高的学习曲线,但对于一个库来说它是值得的,因为它将允许您的库的用户轻松获取所有依赖项。 对于最终用户应用程序,单个可分发可能是更好的选择(您可以使用Maven或Ivy在内部管理依赖项,然后使用jarjar或Java Web Start分发给最终用户)。
以防你是否正在使用maven。 您需要包含以下插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<properties>
<property>
<name>listener</name>
<value>com.example.TestProgressListener</value>
</property>
</properties>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
阅读更多@ 如何构建具有依赖关系的JAR文件?
您需要依赖清单文件中的classpath属性。 这解释了如何使用Ant将库打包到我的jar中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.