Maven,按照配置文件的顺序更改不同的构建目录结构

时间:2012-08-09 13:07:30

标签: java maven

我在这里遇到一个非常荒谬的问题我有一个pom.xml用于构建war文件。我已经引入profile来处理不同的环境(dev/prod)。但是问题是,当我创建构建时,它会为pom.xml

中按顺序创建的配置文件创建正确的构建目录

请在这里帮助解决问题。

 <build>
    <pluginManagement>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

        </plugins>
    </pluginManagement>
</build>

<profiles>
    <profile>
        <activation>
            <property>
                <name>lifecycle</name>
                <value>prod</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.1.1</version>
                        <configuration>
                            <warSourceExcludes>**login.jsp</warSourceExcludes>
                        </configuration>
                </plugin>
            </plugins>
            <directory>target/${lifecycle}</directory>
            <finalName>testapp</finalName>
            <resources>
               <resource>
                <directory>src/main/resources/${lifecycle}</directory>
               </resource>
            </resources>
        </build>
    </profile>
    <profile>
        <activation>
            <property>
                <name>lifecycle</name>
                <value>dev</value>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.1.1</version>
                </plugin>
            </plugins>
            <directory>target/${lifecycle}</directory>
            <finalName>testapp</finalName>
            <resources>
               <resource>
                <directory>src/main/resources/${lifecycle}</directory>
               </resource>
            </resources>
        </build>
    </profile>
</profiles>

正确的构建目录应该是

如果 -Dlifecycle = dev

target/dev/testapp/

如果 -Dlifecycle = prod

target/prod/testapp/但在这里我得到'target / testapp-xx.x'

为什么这种行为不同?

触发构建的命令: mvn clean install -Dlifecycle=prod

2 个答案:

答案 0 :(得分:2)

在prod配置文件中添加id元素可解决此问题。

答案 1 :(得分:1)

您可以做的一件事是指定应该构建哪个配置文件。

为每个配置文件定义ID:

 <profiles>
    <profile>
        <id>dev</id>
...
    <profile>

构建时,使用参数 -P 通知maven激活哪些配置文件

  

mvn clean install -P dev