假设我有一个模块A:jar
,其运行时和编译依赖关系取决于JDK版本。在我的例子中,我有一个pre-jdk6-profile
用于JAXB API:在JDK 1.6.0之前,我需要将jaxb-api-nnn.jar
作为编译依赖项包含进来。这个配置文件放在A.pom
里。
我还有一个模块B:war
,它依赖于A:jar
。我想在构建服务器上激活此配置文件以构建JDK 1.5.x可交付项。当我启用给定的配置文件执行Maven时,我收到了以下消息:
mvn -Ppre-jdk6-profile -o install
[WARNING]
Profile with id: 'pre-jdk6-profile' has not been activated.
在生成的 B.war
中缺少 jaxb-api-nnn.jar
。但是如果我在构建父级 pom.xml
时激活此配置文件,则一切正常。这意味着配置文件不会从依赖项继承,并且父多模块 pom.xml 能够正确构建一切,因为看起来所有的配置文件都合并在反应堆中。
将配置文件移到父pom中会使事情变得更加糟糕,因为依赖项会应用于所有其他项目(例如 C:ear
)。是否有解决此任务的好方法,即如果任何模块 A
依赖于模块 B
,则由配置文件激活的所有编译和运行时依赖项都得到正确处理?
项目 A:jar
中的配置文件如下:
<project ...>
<artifactId>A</artifactId>
<packaging>jar</packaging>
...
<parent>
<artifactId>P</artifactId>
...
</parent>
<profiles>
<profile>
<id>pre-jdk6-profile</id>
<activation>
<jdk>(,1.6.0)</jdk>
</activation>
<dependencies>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
</dependency>
</dependencies>
</profile>
</profiles>
...
</project>
A
还是模块B
? - dma_k<scope>provided</scope>
,在 webapp 中使用默认范围。但是在 profile 内部两者都要使用。 - Sean Patrick Floyd