假设我的 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 构建的 War 文件中仅包含使用过的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884795/