[英]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.