繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM