3

我有一个打包我的 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 时使用其他版本?

如果您不理解混乱的场景,请告诉我:)。

问候,

4

1 回答 1

0

我认为您可以将 log4j.properties 从 Util.war 中删除,因为它取决于应用程序。相反,您可以为此使用 ProjA.ear/APP-INF/classes 和 ProjB/APP-INF/classes 文件夹。

请参阅JavaEE 应用程序中的 app-inf 和 web-inf 文件夹有什么区别?

您的应用程序服务器会自动将此文件夹添加到 Class-Path。但要注意父母第一/孩子第一类加载

请参阅Java EE 和 Java SE 类加载

但是,在 Java EE 中,类加载器首先尝试加载类本身,然后将该类的类加载委托给其父类加载器。

此语句取决于您的应用程序服务器。

于 2015-01-20T14:10:33.723 回答