Maven配置文件属性不是“重写”

时间:2012-02-16 11:32:13

标签: java maven maven-3

我有Maven多模块项目,具有这样的结构:

  

父POM-项目

     

- module1

     

- module2

在parent-pom-project中我有这样的pom.xml

    <modules>
        <module>module1</module>
    </modules>
...
    <profiles>
        <profile>
           <id>local</id>
           <properties>
               <prop>local_prop</prop>
           </properties>
        </profile>
        <profile>
           <id>test</id>
           <modules>
                <module>module2</module>
           </modules>
           <properties>
               <prop>test_prop</prop>
           </properties>
        </profile>
    </profiles>

在所有pom.xml文件中,我都有这样的标记:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

resource 目录中的module1和module2,我有包含此类文本的属性文件:

prop=${prop}

问题在于

之后
  

mvn clean install

  

mvn clean install -Ptest

甚至

  

mvn clean install -P test

我得到了

  

丙= local_prop

如果我还构建了构建模块2的用户测试配置文件,但是从本地配置文件中使用了属性。 我使用Maven 3.0.3。 有人有什么想法吗?

5 个答案:

答案 0 :(得分:8)

您可以尝试使用 mvn help:effective-pom -Ptest 命令查看构建中使用的参数。

有关详细信息,请参阅http://maven.apache.org/plugins/maven-help-plugin/plugin-info.html

答案 1 :(得分:5)

在资源目录前添加${basedir}

<directory>${basedir}/src/main/resources</directory>

这应该可以解决您的问题。我的解释是,在一个多模块项目中,如果你是从顶级构建的,那么它就不会正确地(在子模块中)拾取路径。因此,在尝试过滤时,它会将其应用于不同的目录(实际的根级聚合器),而不是子目录。

我希望它有所帮助。

答案 2 :(得分:1)

我解决了为eclipse卸载当前maven插件的问题并使用了另一个。 现在我用这个: - Maven整合:http://m2eclipse.sonatype.org/sites/m2e - WTP的Maven集成:http://m2eclipse.sonatype.org/sites/m2e-extras/

早我使用这个http://download.eclipse.org/technology/m2e/releases/。我无法解释这种行为,但可能是插件改变了一些配置。

答案 3 :(得分:0)

如果您没有指定任何个人资料,我无法弄清楚maven如何解决您的财产问题。所以,为了看到真正存在的东西,我尝试了自己,完全遵循你所描述的模式,并且......我没有遇到你遇到的问题。在你的情况下,它真的表现如果属性是在配置文件之外定义 - 如建议的bugske。如果您暂时评论两个配置文件会发生什么?

答案 4 :(得分:0)

虽然我有同样的问题,但在这里找不到解决办法。对我来说问题是Eclipse,我在命令行上使用mvn并行。在我在命令行上执行此操作后,Eclipse立即调用了进程资源。

因此解决方案是在Eclipse中选择配置文件(Project-&gt; Maven-&gt;选择Maven配置文件)。