如何在主 POM 和子 POM 上引用属性文件
How to reference a properties file on Master and Child POM's
我有一个定义两个配置文件的主 POM 文件:QA 和 Production。它使用 properties-maven-plugin 来设置一些变量,这些变量稍后会被 wildfly-maven-plugin 用来将包部署到 Web 服务器。
像这样:
[主 POM]
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>../build-qa.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
在子 POM 上:
<parent>
<groupId>fhng.apps</groupId>
<artifactId>fhng-build-all</artifactId>
<version>1.0</version>
</parent>
(...)
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>1.1.0.Alpha11</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<hostname>${wildfly.server}</hostname>
<port>${wildfly.port}</port>
<username>${wildfly.username}</username>
<password>${wildfly.password}</password>
<filename>myapp.war</filename>
</configuration>
</plugin>
主 POM 位于项目根目录中,每个特定的 Web 应用程序位于子文件夹中。如果我从每个特定的项目文件夹 运行 mvn install ,这将起作用。我非常想从 master pom 文件夹中 运行 "mvn -Pqa clean install"。但是它失败了,因为主 pom 引用 ..\build-qa.properties 它在每个项目中都有效,但显然在父目录中无效。
有什么办法可以解决吗?是否可以引用相对于 Master POM 文件夹的文件,而不管构建了哪个特定的 POM?我知道这种方法打破了 Maven 的前提,即父包不一定存在于我们的工作目录中。
作为替代方案,有没有一种方法可以将属性文件作为父包的工件进行引用?这样 maven 就能够从 repo 中获取所述父包并使用其中的文件?
我也接受一种方法 "skip" 或者 "disable" 父 pom 上的 initialize/compile/install 阶段,这样它就不会尝试读取 .properties 文件。
谢谢!
如果在根文件夹中放置目录.mvn/
,则可以通过${maven.multiModuleProjectDirectory}
引用根文件夹
我目前的情况:
<file>${maven.multiModuleProjectDirectory}/build-qa.properties</file>
参考:http://takari.io/2015/03/20/mmp.html
PS。请记住,空文件夹不属于 git
我有一个定义两个配置文件的主 POM 文件:QA 和 Production。它使用 properties-maven-plugin 来设置一些变量,这些变量稍后会被 wildfly-maven-plugin 用来将包部署到 Web 服务器。
像这样: [主 POM]
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>../build-qa.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
在子 POM 上:
<parent>
<groupId>fhng.apps</groupId>
<artifactId>fhng-build-all</artifactId>
<version>1.0</version>
</parent>
(...)
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>1.1.0.Alpha11</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<hostname>${wildfly.server}</hostname>
<port>${wildfly.port}</port>
<username>${wildfly.username}</username>
<password>${wildfly.password}</password>
<filename>myapp.war</filename>
</configuration>
</plugin>
主 POM 位于项目根目录中,每个特定的 Web 应用程序位于子文件夹中。如果我从每个特定的项目文件夹 运行 mvn install ,这将起作用。我非常想从 master pom 文件夹中 运行 "mvn -Pqa clean install"。但是它失败了,因为主 pom 引用 ..\build-qa.properties 它在每个项目中都有效,但显然在父目录中无效。
有什么办法可以解决吗?是否可以引用相对于 Master POM 文件夹的文件,而不管构建了哪个特定的 POM?我知道这种方法打破了 Maven 的前提,即父包不一定存在于我们的工作目录中。
作为替代方案,有没有一种方法可以将属性文件作为父包的工件进行引用?这样 maven 就能够从 repo 中获取所述父包并使用其中的文件?
我也接受一种方法 "skip" 或者 "disable" 父 pom 上的 initialize/compile/install 阶段,这样它就不会尝试读取 .properties 文件。
谢谢!
如果在根文件夹中放置目录.mvn/
,则可以通过${maven.multiModuleProjectDirectory}
我目前的情况:
<file>${maven.multiModuleProjectDirectory}/build-qa.properties</file>
参考:http://takari.io/2015/03/20/mmp.html
PS。请记住,空文件夹不属于 git