我正在我的项目中,我将数据连接移动到beta和生产数据库进行测试。很明显,将alpha数据库凭据存储在源存储库中是可以的,但是测试版和生产凭证,id应该放在那个发射队的前面。
我知道maven可以有一个{userdir} /build.properties文件。这是我想用来将数据库凭据保留在源存储库之外的文件。但我似乎无法让maven弄清楚,对于文件x.cfg.xml,它必须替换值。
所以我在我的一个hibernate.cfg.xml文件中有这行
<property name="hibernate.connection.url">@ssoBetaUrl@</property>
现在如何让maven用{userdir} /build.properties文件中的值替换该变量?
编辑------------- 香港专业教育学院一直在使用properties-maven-plugin插件,但我似乎无法解决它。我把它放在我的父pom中
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<id>read-properties</id>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
</execution>
</executions>
</plugin>
但是当它构建时,它不会触发。如果我正在阅读http://maven.apache.org/maven-1.x/reference/properties.html,它应该在〜/ build.properties文件夹中找到构建属性文件并从那里开始,但我不确定。
答案 0 :(得分:0)
我认为你正在以错误的方式解决这个问题。而不是让构建过程将适当的连接细节烘焙到JAR文件中,而应该让程序在启动时查找配置文件。
通常,我的基于hibernate的应用程序将在%user.home&/.appname/config.properties
下查找文件,并从那里加载数据库凭据和其他部署规范数据。如果文件丢失,可以在JAR中包含默认版本并将其复制到此位置(在初始启动时,您不必将文件复制粘贴到新系统),然后使用适当的设置进行编辑。
这样,您可以使用相同的构建为测试和生产服务器生成JAR(或WAR)文件,差异将在(可能已经部署)配置文件中。这也使得可以进行多个生产部署,每个部署与不同的数据库进行通信,而不会在构建过程中出现任何复杂情况。
答案 1 :(得分:0)
你可以使用两个插件。
替换者
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>{userdir}/build.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>target/**/*.*</include>
</includes>
<replacements>
<replacement>
<token>@ssoBetaUrl@</token>
<value>http://[anyURL]</value>
</replacement>
</replacements>
</configuration>
</plugin>