仅继承父poms中的某些属性或某些插件

时间:2013-11-07 09:40:32

标签: maven ant oracle-adf

我们拥有使用自定义Ant脚本而不是普通Maven构建的Oracle ADF和SOA项目。对于ADF和SOA,相同的Ant插件的配置不同。文件结构不是由项目类型驱动的,但可以混合使用,意思是:

- parent pom
    - ADF
    - SOA type1
    - SOA type2

我们如何设置pluginManagement不同版本的Ant插件,以及孩子们选择他们想要的任何类型的Ant插件。据我所知,你只能选择你想要的插件,但不能选择相同插件的风格。 我不想为此复杂化我的继承结构。出于发布目的,我需要将结构保持原样。

我想要属性,我希望在中心位置有一些类型的属性,一个项目能够使用它们,但也继承父pom(用于发布目的)。有点像从多个父母那里继承。

我不想因为需要属性和插件而紧张(这对所有项目都是如此,而不仅仅是我的)。为了释放目的,我需要保持我的pom结构清洁。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用profiles。它们允许为特定场景定制特定构建。

您可以在父pom中定义多个配置文件,每个配置文件都包含自己的ant <plugin>部分。每个配置文件也有activation部分。然后在您的子模块中,您可以激活相应的配置文件。

我会尝试使用一些sudo代码给出一个例子:

父pom

<profile>
    <id>adf-project</id>
    <build>
        <plugins>
            <plugin>
                <!-- adf specific ant plugin config -->
            </plugin>
        </plugins>
    </build>
    <activation>
        <property>
            <name>adfBuild</name>
            <value>true</value>
        </property>
    </activation>
</profile>
<profile>
    <id>soa-project</id>
    <build>
        <plugins>
            <plugin>
                <!-- soa ant plugin specific config -->
            </plugin>
        </plugins>
    </build>
    <activation>
        <property>
            <name>soaBuild</name>
            <value>true</value>
        </property>
    </activation>
</profile>

然后在您的soa模块pom中,您将拥有以下内容:

<project ...>
    <properties>
        <soaBuild>true</soaBuild>
    </properties>
</project>

然后,这将自动激活该配置文件并使用正确的ant插件配置。

另一个选择是将插件定义为正常但有多个executions(一个执行为soa,一个执行为adf)然后在子poms中使用phase {{none覆盖每个执行1}}对于那些想要运行的执行。应该指出的是,不建议使用后一种方法。有关详细信息,请参阅我的回答here