之前已经问过这个问题,但还没有令人满意的答案!
我在一个充满其他无关类的项目中有一个Java Main.java类。我想将Main.java导出到一个可执行的jar文件中,该文件只包含它实际上使用的依赖项。
这是可能的,如果是这样的话怎么样?
Eclipse(创建runnable jar)和Intellij(创建工件)都将包含在包含Main.java类的模块中定义的所有依赖项。
答案 0 :(得分:0)
您应该使用依赖项管理系统,而不是Eclipse和IDEA中默认提供的系统。许多Java开发人员(包括我)使用Maven。如果您在Eclipse中工作,则包含m2eclipse
您不希望在一个项目中拥有所有依赖项,因为它可能会变得非常臃肿。但是,如果您有使用pom
标记的Maven父级<dependencyManagement>
,则可以轻松引用此父级pom
,然后轻松仅引用该子项目中所需的依赖项。这使得所有内容实际上是分开的,并提供了一种简单的组织机制 - 人们使用Maven的原因。
How to use <dependencyManagement>
in Maven
Maven还有一些插件可以为您管理jar创建,例如: 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语句,则包括所有依赖项。如果你不这样做,那么你需要进行运行时分析。您的问题类似于Turing halting problem。