在Maven中替换文件的正确方法是什么?

时间:2015-12-16 13:28:47

标签: java maven

我有3种不同的配置文件的Maven应用程序,在下面指定

<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileVersion>DEV</profileVersion>
                <webXmlFolder>${id}</webXmlFolder>
            </properties>
        </profile>

        <profile>
            <id>test</id>
            <properties>
                <profileVersion>1.0.0-RC1</profileVersion>
                <webXmlFolder>${id}</webXmlFolder>
            </properties>
        </profile>

        <profile>
            <id>prod</id>
            <properties>
                <profileVersion>1.0.0-Final</profileVersion>
                <webXmlFolder>${id}</webXmlFolder>
            </properties>
        </profile>
    </profiles>

我有这样的Maven结构:

  

的src /主/配置/默认/ WEB-INF / web.xml中

     

的src /主/配置的/ dev / WEB-INF / web.xml中

     

的src /主/配置/测试/ WEB-INF / web.xml中

     

的src /主/配置/ PROD / WEB-INF / web.xml中

     

的src /主/ web应用/ WEB-INF /

我的任务是在构建时将指定的web.xml设置为webapp / WEB-INF,具体取决于指定的配置文件。如果未指定配置文件,则web.xml将从默认文件夹进行复制。

我有插件,但它不起作用。

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy-prod-resources</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <overwrite>true</overwrite>
                        <outputDirectory>${project.build.outputDirectory}/classes/WEB-INF</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/config/${webXmlfolder}/WEB-INF</directory>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

有什么想法吗?我花了很多时间处理这个问题,现在我很困惑。

1 个答案:

答案 0 :(得分:5)

好的,现在一切正常。这是我的最终代码,有效:

<properties>
    <webXmlFolder>default</webXmlFolder>
    <profileVersion>defaultVersion</profileVersion>
</properties>

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileVersion>DEV</profileVersion>
            <webXmlFolder>dev</webXmlFolder>
        </properties>
    </profile>

    <profile>
        <id>test</id>
        <properties>
            <profileVersion>1.0.0-RC1</profileVersion>
            <webXmlFolder>test</webXmlFolder>
        </properties>
    </profile>

    <profile>
        <id>prod</id>
        <properties>
            <profileVersion>1.0.0-Final</profileVersion>
            <webXmlFolder>prod</webXmlFolder>
        </properties>
    </profile>
</profiles>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy-web.xml</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <overwrite>true</overwrite>
                        <outputDirectory>${basedir}/target/classes/WEB-INF</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/config/${webXmlFolder}/WEB-INF</directory>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>