【问题标题】:Maven: include resource file based on profileMaven:包含基于配置文件的资源文件
【发布时间】:2011-09-08 19:45:44
【问题描述】:

我正在将一个 Ant webapp 项目转换为 Maven。我的大部分工作都在工作,但我一直在试图弄清楚如何根据配置文件从不同的来源复制一些资源文件。

我有src/main/resources/persistence-{dev, prod}.xml。其中之一需要作为WEB-INF/classes/META-INF/persistence.xml 包含在war 文件中。

我希望在 dev 配置文件处于活动状态时复制 dev 版本,并在 prod 处于活动状态时复制 prod 版本。

【问题讨论】:

  • 我不认为maven资源插件解决了他的问题,因为据我所知这个插件只能包含或排除文件,不能复制和重命名。

标签: maven


【解决方案1】:

只需像 http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html 那样使用 maven 资源插件,并在配置文件中设置文件名或扩展名的属性。

【讨论】:

  • 你的回答不包括persistence.xml文件的重命名。
  • 您可以使用不同的文件夹来加载资源,而不是使用不同的源文件名,并将其作为属性,因此您不必重命名文件..
  • @ManfredMoser - 我认为在一个 persistence.xml 中使用自定义属性是合适的方式。
  • 情况可能会,也可能不会。无论如何,这不是问题的目的。
【解决方案2】:

如果您不喜欢拥有 3 个单独的 persistence.xml 文件并有选择地复制一个或另一个的范例,您可以使用带有过滤功能的 Maven 配置文件(前几天刚刚实现,今天遇到了您的帖子) :

在persistence.xml中:

<property name="hibernate.show_sql" value="${hibernate.debug}" />
<property name="hibernate.format_sql" value="${hibernate.debug}" />

在 pom.xml 中创建配置文件并定义变量:

<profiles>
  <profile>
    <id>hib-debug</id>
    <properties>
      <hibernate.debug>true</hibernate.debug>
    </properties>
  </profile>
</profiles>

在构建时定义一个默认值而不指定配置文件:

<properties>
  <hibernate.debug>false</hibernate.debug>
</properties>

并且....确保您打开资源过滤:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

然后你用 mvn -Phib-debug 构建,瞧!替换完成。

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2016-07-04
    • 2017-07-13
    • 2019-04-11
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多