【发布时间】:2011-04-01 17:32:03
【问题描述】:
假设我有一个模块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.
并且jaxb-api-nnn.jar 缺失导致B.war。但是,如果我在从父 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>
【问题讨论】:
标签: maven-2