2012-02-16 82 views
10

我有这样的结构的Maven多模块项目:Maven的配置文件属性不是 “覆盖”

家长聚甲醛项目

- 模块1

- 模块2

在父母项目我有这样的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> 

在模块1和模块2在资源目录我有这样的文字属性文件:

prop=${prop} 

的问题是,经过

mvn clean install

MVN全新安装-Ptest

甚至

MVN全新安装-P测试

我得到

丙= local_prop

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

+1

您确定没有在任何配置文件节点之外定义属性吗? – bugske 2012-02-16 11:36:54

+0

事实上,我认为你可以尝试在空值的任何配置文件节点之外定义属性。 - > bugske 2012-02-16 11:37:48

+0

2 bugske是的 - 我仔细检查一下。我试试你的第二个想法 - 没有什么变化。 – Nazar 2012-02-16 12:02:07

回答

1

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

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

+0

奇怪...听起来像是m2插件中的其他错误... (您的第三个链接被打破) – Yanflea 2012-02-20 10:56:51

+0

在Eclipse中使用此URL(帮助 - >安装新软件) – Nazar 2012-02-21 15:24:28

+1

(我是IntelliJ用户)。好吧,我应该再读一遍;)(“这是一个Eclipse更新站点/ p2存储库;你必须从Eclipse访问它”)...对不起。 – Yanflea 2012-02-21 16:28:52

0

我不明白如果你不指定任何配置文件,maven如何解决你的财产。所以,为了看看真正存在的是什么,我尝试着自己,遵循你所描述的模式,并且......我没有遇到你所遇到的问题。就你的情况而言,它的行为就好像属性是在配置文件外部定义的 - 就像bugske所建议的一样。如果你暂时评论这两个配置文件会发生什么情况

+0

我收到道具= $ {prop} – Nazar 2012-02-20 10:27:12

+0

...正如所料。 – Yanflea 2012-02-20 10:54:48

4

在你的资源目录前添加一个${basedir}

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

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

我希望它有帮助。

+1

经过很长时间的挖掘,这解决了我的问题!谢谢! – jonashackt 2016-11-23 08:50:32

0

尽管我有老问题,但没有找到解决方法。对我来说,问题在于我在命令行上使用了与mvn并行的Eclipse。 Eclipse在命令行上立即调用了process-resources。

因此,解决方案是在Eclipse中选择配置文件(Project-> Maven-> Select Maven Profiles)。