我正在开发一个模块化的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;。 但这不起作用。
我该怎么做才能解决?
答案 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。