我有一个复杂的包装我的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文件,如何在打包ProjA时配置Maven添加ProjA特定文件并在打包ProjB时使用其他版本?
如果你不理解混乱的情况,请告诉我。)。
此致
答案 0 :(得分:0)
我认为您可以从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?
您的Application Server会自动将此文件夹添加到Class-Path。但要注意父母第一次/孩子第一次加载
请参阅Java EE and Java SE classloading
但是,在Java EE中,类加载器首先尝试加载类本身,然后将该类的类加载委托给其父类加载器。
此声明取决于您的Application Server。