我有一个打包 EAR 项目的复杂场景,下面是可以完全理解它的视觉描述:
ProjA.ear
|-- ProjA.war
|-- Util.war
| |-- WEB-INF
| | |-- classes
| | | -- log4j.properties
同样,我还有另一个项目,其结构是:
ProjB.ear
|-- ProjB.war
|-- Util.war
| |-- WEB-INF
| | |-- classes
| | | -- log4j.properties
Util.war 是 ProjA 和 ProjB 的通用项目(log4j.properties 除外)。
下面是我如何在 ProjA 和 ProjB 中指定 Util.war 的依赖关系:
<dependency>
<groupId>abc</groupId>
<artifactId>xyz</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
现在的问题是:由于每个项目都有不同版本的 log4j.properties 文件,如何配置 Maven 在打包 ProjA 时添加 ProjA 特定文件并在打包 ProjB 时使用其他版本?
如果您不明白这个困惑的场景,请告诉我:)。
问候,
最佳答案
我认为您可以从 Util.war 中删除 log4j.properties,因为它取决于应用程序。相反,您可以使用 ProjA.ear/APP-INF/classes 和 ProjB/APP-INF/classes 文件夹来实现此目的。
参见What difference between app-inf and web-inf folders in JavaEE applications?
您的应用程序服务器会自动将此文件夹添加到类路径中。但要注意父类优先/子类优先加载
参见Java EE and Java SE classloading
However, In Java EE, a classloader first tries to load the class itself and then delegate the classloading of that class to its parent classloader.
此语句取决于您的应用程序服务器。
关于java - 从 Maven 中的 WAR 类型子模块中排除属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27419360/