簡體   English   中英

構建包含其所有依賴項的JAR

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

在導出時選擇“將所需庫提取到生成的JAR”。

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

“將所需的庫提取到生成的JAR中”應該是您所需要的。

當你構建一個jar時,你會得到一個只包含你的代碼的JAR,而不是你的Jar需要的任何依賴項。 您可以使用jarjar之類的東西將所有依賴項合並到一個易於管理的Jar文件中,或者將所有依賴JAR復制到一個文件夾中以便於使用。 看起來Eclipse也有選擇來做這種事情(見上面的帖子)。

另一種選擇是使用依賴管理系統,如MavenIvy 這有一個更高的學習曲線,但對於一個庫來說它是值得的,因為它將允許您的庫的用戶輕松獲取所有依賴項。 對於最終用戶應用程序,單個可分發可能是更好的選擇(您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM