Maven:过滤persistence.xml

时间:2014-09-23 13:29:44

标签: maven filtering war

在我们的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拒绝覆盖仍然包含通配符的文件

如何在不重新发明轮子的情况下完成这项工作?

2 个答案:

答案 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 时尝试处理资源并且将其部署到资源文件夹 - 已经发生了未经处理的情况。