让maven替换基于user / build.properties的值

时间:2011-12-07 12:26:52

标签: maven

我正在我的项目中,我将数据连接移动到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文件夹中找到构建属性文件并从那里开始,但我不确定。

2 个答案:

答案 0 :(得分:0)

我认为你正在以错误的方式解决这个问题。而不是让构建过程将适当的连接细节烘焙到JAR文件中,而应该让程序在启动时查找配置文件。

通常,我的基于hibernate的应用程序将在%user.home&/.appname/config.properties下查找文件,并从那里加载数据库凭据和其他部署规范数据。如果文件丢失,可以在JAR中包含默认版本并将其复制到此位置(在初始启动时,您不必将文件复制粘贴到新系统),然后使用适当的设置进行编辑。

这样,您可以使用相同的构建为测试和生产服务器生成JAR(或WAR)文件,差异将在(可能已经部署)配置文件中。这也使得可以进行多个生产部署,每个部署与不同的数据库进行通信,而不会在构建过程中出现任何复杂情况。

答案 1 :(得分:0)

你可以使用两个插件。

  1. 属性 - 行家-插件
  2. 替换者

    <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>