Java,创建可运行的jar文件,包括仅使用的依赖项。

时间:2014-10-17 18:30:42

标签: java eclipse intellij-idea

之前已经问过这个问题,但还没有令人满意的答案!

我在一个充满其他无关类的项目中有一个Java Main.java类。我想将Main.java导出到一个可执行的jar文件中,该文件只包含它实际上使用的依赖项。

这是可能的,如果是这样的话怎么样?

Eclipse(创建runnable jar)和Intellij(创建工件)都将包含在包含Main.java类的模块中定义的所有依赖项。

1 个答案:

答案 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