[英]Java, create runnable jar file including ONLY used dependencies.
之前已經有人問過這個問題,但是還沒有令人滿意的答案!
我在一個充滿其他無關類的項目中有一個Java Main.java類。 我想將Main.java導出到可執行的jar文件中,該文件僅包含它實際使用的依賴項。
如果可能的話,這可能嗎?
Eclipse(創建可運行的jar)和Intellij(創建工件)都將包含在包含Main.java類的模塊中定義的所有依賴項。
您實際上應該使用的是依賴性管理系統,而不是Eclipse和IDEA中默認提供的系統。 許多Java開發人員(包括我在內)都使用Maven 。 如果您使用的是Eclipse,則其中包含m2eclipse
您不希望將所有依賴項放在一個項目中,因為它可能會變得腫。 但是,如果您有一個使用<dependencyManagement>
標記的Maven父pom
,則可以輕松引用該父pom
,然后輕松引用該子項目中所需的依賴項。 這將所有分離的東西實際上是分開的,並提供了一種簡單的組織機制-人們使用Maven的原因。
如何在Maven中使用<dependencyManagement>
Maven還具有可為您管理jar創建maven-assembly-plugin
,例如maven-assembly-plugin
,可讓您按照自己想要的方式在jar中構造依賴項,依此類推。
您必須自己以某種方式執行此操作。 您期望任何IDE /依賴項管理系統如何使用以下代碼:
Test.java
public class Test {
public static void main(String... args) {
System.exit(0);
new Foo(null);
}
}
Foo.java
import com.google.common.base.Preconditions;
public class Foo {
public Foo(String s) {
Preconditions.checkNotNull(s);
}
}
這里不需要Guava依賴項...但是您僅在RUNTIME中知道這一點。 如果您包括所有類的所有import語句,那么您將包括所有依賴項。 如果不這樣做,則需要進行運行時分析。 您的問題類似於圖靈停止問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.