Maven 2 为什么可以';我不能从另一个配置文件激活Maven2配置文件吗?

Maven 2 为什么可以';我不能从另一个配置文件激活Maven2配置文件吗?,maven-2,profile,activation,Maven 2,Profile,Activation,我有一个多模块Maven2项目,它构建了一个web应用程序。应用程序连接到后端服务器和数据库。我们的环境中部署了多个服务器实例,还有多个用于开发、UAT、生产等的后端和DB实例。因此,实际上,每个应用程序配置都需要以下3个坐标: 前端服务器 后端服务器 分贝 我正在统一和自动化应用程序配置。在Maven中将这些不同的配置表示为概要文件是很容易和明显的。然后,我可以通过激活每个组中的一个配置文件来创建特定配置,例如 mvn -Pserver.Server1,backend.prod,db.ua

我有一个多模块Maven2项目,它构建了一个web应用程序。应用程序连接到后端服务器和数据库。我们的环境中部署了多个服务器实例,还有多个用于开发、UAT、生产等的后端和DB实例。因此,实际上,每个应用程序配置都需要以下3个坐标:

  • 前端服务器
  • 后端服务器
  • 分贝
我正在统一和自动化应用程序配置。在Maven中将这些不同的配置表示为概要文件是很容易和明显的。然后,我可以通过激活每个组中的一个配置文件来创建特定配置,例如

mvn -Pserver.Server1,backend.prod,db.uat clean install
这是一个有点乏味的类型和容易出错-如果一个特定的服务器配置错误,连接到错误的数据库,价格可能会很高。解决这个问题的一个明显方法是将所有有用的概要文件组合放入脚本文件中

但我认为,通过直接从服务器配置文件激活必要的后端和DB配置文件,我可以比这更聪明。服务器配置文件位于主pom中,例如

<profile>
    <id>server.myserver</id>
    <properties>
        <jboss.home>D:\Programs\jboss-4.2.1.GA</jboss.home>
        <server.name>NightlyBuild</server.name>
        <hosttobind>192.168.1.100</hosttobind>
        <servlet.port>8080</servlet.port>
        ...
        <db>dev02</db>
    </properties>
</profile>
然后,配置文件被激活,所以很明显我没有拼错任何东西

我忽略了什么吗?有没有其他方法可以让这一切顺利进行

我发现存在一个类似的问题:

然而,IMHO这不是重复——我看到我的方法不起作用,我想了解原因。(我已经阅读了参考资料,但我可能忽略了一些显而易见的东西)。

该功能根本不存在。property activator使用传入的属性,而不是由概要文件设置的任何内容(否则,如果没有更复杂的逻辑,它将不知道以什么顺序激活它们)

当然,您使用的解决方案具有相同的属性来激活您想一起做的事情,这是最好的解决方案。我意识到这可能并不总是令人满意的——在这种情况下,您所能做的就是让各个概要文件尽可能简单,这样您就可以在命令行上以您想要的方式组合它们,而无需在它们之间重复

涉及此功能的问题是:
涉及属性激活的问题是:

Brett提到的问题在maven 3.x中得到了解决,因此您现在可以在settings.xml中定义属性以触发pom中的概要文件。以下是一个例子:

在settings.xml中:

<profile>
    <id>localDist</id>
    <activation>
        <property><name>localDist</name></property>
    </activation>
    <properties>
        <doReleaseTasks>true</doReleaseTasks>
    </properties>
</profile>

本地区
本地区
真的
在您的pom中(或者更好,在您的家长pom中):


doReleaseTasks
doReleaseTasks
... mvn-DlocalDist将激活这些插件
使用enforcer插件强制mvn 3.0或更高版本是个好主意:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
                <execution>
                    <id>enforce-maven</id>
                    <goals> <goal>enforce</goal> </goals>
                    <configuration>
                        <rules>
                            <requireMavenVersion>
                                <version>[3.0,)</version>
                                <message>
*** Maven 3.x required to allow cascading profiles to be activated in settings.xml (MNG-2276)
                                </message>
                            </requireMavenVersion>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

maven enforcer插件
强制执行maven
执行
[3.0,)
***Maven 3.x需要允许在settings.xml(MNG-2276)中激活级联配置文件

@Brett,谢谢,这澄清了问题。然而,最后一件事是:你写了“你使用的解决方案,具有相同的属性来激活你想一起做的事情,是最好的解决方案”。从什么意义上说?从美学角度来说,可能是这样,但它仍然不起作用……我指的是“从命令行”的解决方案。因此,如果您需要
profile1
来暗示激活了
profile2
,请确保它们都是使用
propertyX
激活的,然后使用
mvn-DpropertyX
而不是
mvn-Pprofile1
。这并不像您所寻找的那样灵活。
<profile>
    <id>localDist</id>
    <activation>
        <property><name>localDist</name></property>
    </activation>
    <properties>
        <doReleaseTasks>true</doReleaseTasks>
    </properties>
</profile>
<profile>
    <id>doReleaseTasks</id>
    <activation>
        <property><name>doReleaseTasks</name></property>
    </activation>
    <build>
        <plugins>
            ... mvn -DlocalDist will activate these plugins
        </plugins>
    </build>
</profile>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
                <execution>
                    <id>enforce-maven</id>
                    <goals> <goal>enforce</goal> </goals>
                    <configuration>
                        <rules>
                            <requireMavenVersion>
                                <version>[3.0,)</version>
                                <message>
*** Maven 3.x required to allow cascading profiles to be activated in settings.xml (MNG-2276)
                                </message>
                            </requireMavenVersion>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>