我知道在许多情况下,(笨重但是)可能使用两个配置文件导致从文件中读取属性(如果存在),否则设置默认值,例如。
<profile>
<id>my-default-props</id>
<activation>
<file>
<missing>${my.file.path}</missing>
</file>
</activation>
<properties>
<my.prop1>Blah</my.prop1>
<my.prop2>Another</my.prop2>
</properties>
</profile>
<profile>
<id>read-my-props</id>
<activation>
<file>
<exists>${my.file.path}</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${my.file.path}</file>
</files>
<quiet>false</quiet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
不幸的是,这对我不起作用:我需要在各种子项目中覆盖“my.file.path”的值,但是在生命周期的早期评估配置文件激活。这意味着在评估期间不使用子项目的值,并且永远无法正确读取属性。
这对我来说似乎是一个普遍的要求,但谷歌搜索告诉我。谁能告诉我如何实现这一目标?感谢。
答案 0 :(得分:2)
要回答我自己的问题......我发现我可以使用两个插件的组合,而不是使用配置文件,这些插件可以在同一个阶段中一个接一个地执行:
true
<exportAntProperties>true</exportAntProperties>
由于属性仅在尚不存在时设置,因此具有设置默认值的效果。
警告:这与设置一堆属性默认值(如果文件不存在)完全相同。这取决于每个属性。这可能会导致混合不一致的属性(例如MySQL数据库驱动程序与PostgreSQL数据库URL)。
示例:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<id>read-my-properties</id>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${my.properties.file}</file>
</files>
<quiet>true</quiet>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>set-default-properties</id>
<phase>initialize</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<exportAntProperties>true</exportAntProperties>
<target>
<property name="db.driver" value="org.postgresql.Driver"/>
<property name="db.name" value="my_db_name"/>
<!-- etc. -->
</target>
</configuration>
</execution>
</executions>
</plugin>
这里的关键是没有发生配置文件激活评估 - 由于发生得太早而无法正常工作。在${my.properties.file}
块期间可以安全地使用<execution>
属性,因为这些属性在子项目有机会正确覆盖该值之后发生。