首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能从另一个配置文件中激活一个Maven2配置文件?

为什么我不能从另一个配置文件中激活一个Maven2配置文件?
EN

Stack Overflow用户
提问于 2010-02-11 16:48:12
回答 2查看 13.5K关注 0票数 19

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

  • 前端服务器
  • 后端服务器
  • 数据库

我正致力于统一和自动化应用程序配置。在Maven中将这些不同的配置表示为配置文件是简单而明显的。然后,我可以通过激活每个组的一个配置文件来创建一个特定的配置。

代码语言:javascript
复制
mvn -Pserver.Server1,backend.prod,db.uat clean install

这是有点繁琐的类型和容易出错-如果一个特定的服务器被错误地配置为连接到错误的DB,代价可能很高。解决这一问题的一个明显方法是将所有有用的配置文件组合放入脚本文件中。

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

代码语言:javascript
复制
<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>

后端和DB配置文件位于Config子模块的pom中。

代码语言:javascript
复制
<profile>
    <id>db.dev02</id>
    <activation>
        <property>
            <name>db</name>
            <value>dev02</value>
        </property>
    </activation>
    <properties>
        <jdbc.address>jdbc:oracle:thin:@192.168.0.101:1521:dbdev02</jdbc.address>
    </properties>
</profile>

因此,理论上,由于server.myserver配置文件将db属性设置为dev02,这应该会触发子pom中db.dev02配置文件的激活。然而,这种情况并没有发生。(如果这两个配置文件位于同一个pom中,顺便说一句)。如果我将命令行中的属性设置为

代码语言:javascript
复制
mvn -Ddb=dev02 help:active-profiles

然后档案被激活了,所以很明显我没有拼错任何东西。

我忽略了什么吗?还有其他办法让这件事成功吗?

我发现有一个类似的问题:我能让一个maven配置文件激活另一个吗?

然而,国际水文学组织-这不是重复-我看到我的做法行不通,我想了解原因。(我读过参考资料,但可能忽略了一些显而易见的东西)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-11 23:24:20

这个特性根本不存在。属性激活器使用传入的属性,而不是由配置文件设置的任何属性(否则,如果没有更复杂的逻辑,它将不知道激活它们的顺序)。

您使用的解决方案,具有相同的属性,以激活您想要做的事情,是最好的解决方案。我意识到,这可能并不总是令人满意的--在这种情况下,你所能做的就是尽可能简单地让每个人的配置文件变得简单,这样你就可以在命令行上以你想要的方式组合它们,而不会重复它们之间的事情。

涉及此特性的问题是:https://issues.apache.org/jira/browse/MNG-3309

涉及属性激活的问题是:https://issues.apache.org/jira/browse/MNG-2276

票数 24
EN

Stack Overflow用户

发布于 2014-06-10 19:03:26

布雷特提到的MNG-2276号是在maven 3.x中解析的,因此现在允许您在settings.xml中定义属性以触发pom中的配置文件。下面是一个示例:

在settings.xml中:

代码语言:javascript
复制
<profile>
    <id>localDist</id>
    <activation>
        <property><name>localDist</name></property>
    </activation>
    <properties>
        <doReleaseTasks>true</doReleaseTasks>
    </properties>
</profile>

在您的pom中(或者更好的是在您的父母pom中):

代码语言:javascript
复制
<profile>
    <id>doReleaseTasks</id>
    <activation>
        <property><name>doReleaseTasks</name></property>
    </activation>
    <build>
        <plugins>
            ... mvn -DlocalDist will activate these plugins
        </plugins>
    </build>
</profile>

使用增强插件强制MVN3.0或更高版本的好主意:

代码语言:javascript
复制
<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>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2246033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档