如何在Maven的软件包生成过程中选择一个/META-INF/context.xml?

时间:2012-09-04 16:00:38

标签: java maven

我有一个庞大的应用程序,在不同的环境中运行,具有不同的配置。 所以我需要使用不同的/META-INF/context.xml生成包。

这是我的META-INF/文件夹:

META-INF/
  context.xml  
  context2.xml  
  context3.xml  
  context4.xml  

我已经尝试过 maven-antrun-plugin ,但它无法处理META-INF/内的文件。

现在,我正在尝试 maven-war-plugin ,但它不会重命名或复制文件。它只添加或排除文件。所以我需要一些帮助。

我想生成一个war包,只选择其中一个,重命名或覆盖原始context.xml

注意:我正在使用个人资料。

2 个答案:

答案 0 :(得分:0)

一种选择可能是使用<packagingExcludes>中的<packagingIncludes>maven-war-plugin

例如,要排除context.xmlcontext1.xml

 <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <packagingExcludes>META-INF/context.xml,META-INF/context1.xml</packagingExcludes>
        </configuration>
  </plugin>

您可以在include和exclude部分中使用regex来过滤掉各种文件。这个maven wiki涵盖了有关此主题的更多示例和详细信息。

答案 1 :(得分:0)

首先,不要将输入文件放在META-INF中。将它们放在maven不知道的文件夹中。现在将属性设置为每个配置文件中的文件名

  <properties>
    <folder>path/to/context/files</folder>
  </properties>

<profile>
  <id>foo</id>
  <properties>
    <filename>context2.xml</filename>
  </properties>
</profile>
<!-- etc. -->

现在使用antrun插件并定义一个ant属性:

<property name="maven.context.file" value="${folder}/${filename}"/>

在致电蚂蚁目标之前,as mentioned on the antrun usage page