我有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。 有人有什么想法吗?
答案 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配置文件)。