模块化项目的物业更换

时间:2014-04-10 13:36:40

标签: java maven maven-3

我正在开发一个模块化的maven项目。我项目的骨架如下:

|-- parent
    |-- model
        --pom.xml
    |-- services
        --pom.xml
    |-- web-app
        --pom.xml

在模型模块中,我有persistence.xml文件,其中包含一些属性引用:

<persistence>

<persistence-unit name="myUnit">

    //Some classes definition

  <properties>

     <property name="javax.persistence.jdbc.driver" value="${db.driverClass}" />
     <property name="javax.persistence.jdbc.url" value="${db.connectionURL}" />
     <property name="javax.persistence.jdbc.user" value="${db.username}" />
     <property name="javax.persistence.jdbc.password" value="${db.password}" />

  </properties>


</persistence-unit>

我通过

在模型的pom.xml中启用资源过滤
 <build>
    <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
    </resources>
</build>

现在我想在web-app的pom.xml中定义一个配置文件

<profiles>
 <profile>
        <id>Development</id>
        <properties>
            <db.driverClass>MyDriver</db.driverClass>
            <db.connectionURL>jMyUrl</db.connectionURL>
            <db.username>MyUsername</db.username>
            <db.password>MyPassword</db.password>
        </properties>
    </profile>
 </profiles>

<!-- To launch embded jetty server -->
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${maven-jetty-plugin.version}</version>
</plugin>

并在运行时用值替换引用&#34; mvn jetty:run -P Development&#34;。 但这不起作用。

我该怎么做才能解决?

2 个答案:

答案 0 :(得分:1)

Maven使用分层方法 这意味着配置文件仅在其定义的模块及其子项中处于活动状态。属性也是如此 在您的情况下,要过滤的文件位于您定义属性的兄弟模块中。因此,它们不会传播到model模块

答案 1 :(得分:1)

mvn jetty:run不会复制您的资源,因此不会过滤。它主要用于与IDE协同工作,即您更改某些内容,IDE会编译/复制您的更改。

如果您从控制台调用它,则需要显式运行生命周期(或者至少在您的情况下运行process-resources阶段)。

所以尝试像

这样的东西
mvn process-classes jetty:run

理想情况下,您可以将执行拆分为两个单独的shell,一个运行jetty:run,另一个运行mvn process-classes

或者使用IDE。