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