代码之家  ›  专栏  ›  技术社区  ›  Lyubomir Papazov

maven只运行带有配置文件的父pom

  •  0
  • Lyubomir Papazov  · 技术社区  · 6 年前

    在我的项目中,我有一个自定义配置文件 custom-profile-name .

    pom的简化结构如下:

    <artifactId>parent</artifactId> <modules> <module>child</module> </modules>

    当我奔跑

    mvn help:active-profiles -P custom-profile-name
    

    我得到:

    Active Profiles for Project 'org.sample:parent:pom': The following profiles are active: custom-profile-name

    Active Profiles for Project 'org.sample:child': The following profiles are active: custom-profile-name

    我一直在读关于概要文件继承的文章,如果我理解正确,概要文件不应该被继承。有人能解释为什么 自定义配置文件名 在子模块中处于活动状态。

    我的最终目标是使用自定义插件的一个配置执行父模块,使用相同插件的另一个配置执行所有子模块。

    1 回复  |  直到 6 年前
        1
  •  1
  •   hYk    6 年前

    不确定为什么父模块和子模块都被激活为自定义配置文件名。但是要获得所需的内容,可以通过在概要文件中定义属性来完成。 例子:

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>parent-app</name>
    <url>http://maven.apache.org</url>
    
    <modules>
        <module>child</module>
    </modules>
    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <modules>
                <module>child</module>
            </modules>
            <properties>
                <parentProp>foo</parentProp>
                <childProp>foo</childProp>
            </properties>
        </profile>
        <profile>
            <id>custom-profile-name</id>
            <modules>
                <module>child</module>
            </modules>
            <properties>
                <parentProp>xyz</parentProp>
                <childProp>abc</childProp>
            </properties>
        </profile>
    </profiles>
    

    “parentprop”是父pom使用的配置,“childprop”是子pom使用的配置。从配置中可以看出,当属性值不同时,默认配置文件和“自定义配置文件名”配置文件的行为也不同。