在Maven中,如何根据使用的配置文件名称重命名输出的.war文件

36

我在我的pom.xml文件中有三个配置文件...

  1. dev(用于开发者环境)
  2. qa(用于我们内部QA服务器)
  3. prod (用于生产环境)。

当我们运行maven构建时,这三个配置文件都会输出相同名称的war文件。我希望输出 $profilename-somearbitraryname.war

有什么想法吗?


我建议使用Spring配置文件(org.springframework.context.support.PropertySourcesPlaceholderConfigurer)来处理应用程序在不同环境下变化的变量。这样,您可以构建一次并在下一个环境中重新部署它。虽然这可能与您的情况无关。 - worldsayshi
3个回答

61

您已经正确回答了自己的问题:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <rp.build.warname>dev</rp.build.warname>
        </properties>
    </profile>
    <profile>
        <id>qa</id>
        <properties>
            <rp.build.warname>qa</rp.build.warname>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <rp.build.warname>prod</rp.build.warname>
        </properties>
    </profile>
</profiles>

但是有一种更简单的方法来重新定义WAR文件的名称:

<build>
    <finalName>${rp.build.warname}-somearbitraryname</finalName>
    <!-- ... -->
</build>

不需要 maven-war-plugin 插件。


2
不错的小贴士,但根据Maven文档,配置文件不应该用来产生不同的输出。否则,像我看到的一样,编译会变得不必要地复杂。 - Joseph Lust

26

答案很简单...

在每个配置文件中定义一个如下的属性...

<profile>
    <id>qa</id>
    <properties>
        <rp.build.warname>ourapp-qa</rp.build.warname>
    </properties>
</profile>

然后将这个添加到你的插件中...

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
        <warName>${rp.build.warname}</warName>
    </configuration>
</plugin>

2
注意:此配置在maven-war-plugin 3.0.0中不再可用。 - Barett

0
在Maven中,您必须在中使用。
请点击以下链接以确保您的模块已经重写: http://maven.apache.org/plugins/maven-ear-plugin/examples/customizing-a-module-filename.html
 <build>
      <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.10.1</version>
                <configuration>
                 [...]
                    <modules>
                        <ejbModule>
                            <groupId>artifactGroupId</groupId>
                            <artifactId>artifactId</artifactId>
                            <bundleFileName>anotherName-1.2.3.jar</bundleFileName>
                        </ejbModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
  </build>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接