在我们的Peoject中,persistence.xml
位于相对目录
/src/main/resources/META-INF
,
并且未在文件中的pom中提供任何其他说明被复制到
/WEB-INF/classes/META-INF
在Maven构建过程中。这很好,因为hibernate能够从那里选择配置文件。但是现在我们想集中一些配置值,因此使用maven-war-plugin
替换persistence.xml
对各种其他文件执行过滤本身并按预期工作。但对于persistence.xml
,它似乎因各种原因而失败:
只需将persistence.xml
添加到webResources
:
<resource>
<directory>${basedir}/src/main/resources/META-INF/</directory>
<filtering>true</filtering>
<includes>
<include>persistence.xml</include>
</includes>
</resource>
文件已正确过滤,但仍然是.c。抛入outputdirectory的根目录,其中hibernate没有找到它。
尝试提供所需的目标文件夹时:
<resource>
<directory>${basedir}/src/main/resources/META-INF/</directory>
<filtering>true</filtering>
<includes>
<include>persistence.xml</include>
</includes>
<targetPath>WEB-INF/classes/META-INF</targetPath>
</resource>
文件未正确过滤。 我认为过滤实际上有效,但由于文件已经被复制,maven拒绝覆盖仍然包含通配符的文件
如何在不重新发明轮子的情况下完成这项工作?
答案 0 :(得分:2)
这里有一段适合我的XML代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources/META-INF</directory>
<includes>
<include>**/persistence.xml</include>
</includes>
<targetPath>WEB-INF/classes/META-INF</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
答案 1 :(得分:-1)
我找到了解决方案。只是张贴,以防任何人偶然发现同一问题:
上面列出的过滤包含在<webResources>
标记中,因为它实际上是关于处理webapp内容的。
因此,简而言之,我告诉maven部署每个资源而不接触它,并且在部署 webresources 时尝试处理资源并且将其部署到资源文件夹 - 已经发生了未经处理的情况。