gpt4 book ai didi

java - 是否可以使用 maven build 在 war 文件中只包含使用过的类?

转载 作者:行者123 更新时间:2023-11-29 05:25:20 27 4
gpt4 key购买 nike

假设我的 pom.xml 文件中有这个依赖项:

  <dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
</dependency>

当我做一个

clean install

所有的 javaee-api-6.0.jar 都将包含在 WEB-INF\lib 文件夹下的 war 文件中。

是否有可能不包括整个 jar,而是只包括我使用的类及其依赖项?

最佳答案

如果您要部署到 Java EE 应用程序服务器中,则整个 JAR 已由应用程序服务器提供,并且可以从 WAR 文件中省略。您可以通过将其放入提供的范围来完成此操作:

  <dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>

这使得该依赖项可用于编译和测试执行,但不会将其打包到 WAR 中。

相比之下,试图确定您需要哪些单独的类以便您只能包含它们的类文件是一个最终毫无意义的努力。 JVM 仅在类被使用时才加载它们——也就是说,未使用的类不会被加载。

由于反射,一般无法在编译时识别出使用的类。例如,考虑:

System.console().printf("Please specify the implementation class to use");
String className = System.console().readLine();
FooService service = (FooService) Class.forName(className).newInstance();
service.work();

您可以让 JVM 记录加载了哪些类,但不同的执行可以使用不同的类...

关于java - 是否可以使用 maven build 在 war 文件中只包含使用过的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com