java - 从 Maven 中的 WAR 类型子模块中排除属性文件

标签 java maven maven-war-plugin maven-module

我有一个打包 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/

相关文章:

java - 使用哪种设计模式重写代码?

c# - Java MD5 哈希与 C# MD5 哈希不匹配

java - maven-shade-plugin ConnectException : Connection refused for getting java. sun.com DTD(由 XMLAppendingTransformer 处理以构建 Apache CXF)

Maven:为什么我得到 servlet-api-2.5

java - Android 使用证书建立 HTTPSConnection

java - 如何在android工具测试中检查工具栏标题?

maven - Artifactory Gradle 解析 URL 不正确且不一致

Java 9、Hibernate 和 java.sql/javax.transaction

maven - 如何使用 Flexmojos 和 Maven 3 在 WAR 中生成 Flash HTML 包装器?

java - 在 Maven war 覆盖期间覆盖资源