【问题标题】:Maven profiles: maven-antrun-plugin & maven-war-plugin interactionMaven 配置文件:maven-antrun-plugin & maven-war-plugin 交互
【发布时间】:2013-02-05 14:42:06
【问题描述】:

我有一个Spring framework 项目,在src/main/webapp/WEB-INF 中有以下三个文件:

project.propterties
project-servlet.xml
project-security.xml

我正在尝试使用maven profilesprod 构建的情况下“注入”上述文件:

        <profile>
        <id>prod-build</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.7</version>
                    <executions>
                        <execution>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <target>
                                    <delete
                                        file="${project.build.directory}/${project.build.finalName}/WEB-INF/project.properties" />
                                    <copy file="src/main/config/prod/project.properties"
                                        tofile="${project.build.directory}/${project.build.finalName}/WEB-INF/project.properties" />
                                </target>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.3</version>
                </plugin>
            </plugins>
            <resources>
                <resource>
                    <directory>src/main/resources/prod</directory>
                </resource>
            </resources>
        </build>
    </profile>

问题是当maven-antrun-plugin 有机会运行时,war 已经打包好了。 ant &lt;target&gt; 确实运行并进行了适当的更改,但为时已晚。

命令行:

$ mvn -Pprod-build clean install

mvn 输出:

    [INFO] --- maven-antrun-plugin:1.7:run (default) @ FocusMVN ---
[INFO] Executing tasks

main:
     [copy] Copying 1 file to J:\work\workspace\FocusMVN\target\myproject\WEB-INF
[INFO] Executed tasks
[INFO] 
[INFO] --- maven-war-plugin:2.3:war (default-war) @ FocusMVN ---
[INFO] Packaging webapp
[INFO] Assembling webapp [FocusMVN] in [J:\work\workspace\FocusMVN\target\myproject]
[INFO] Processing war project
[INFO] Copying webapp resources [J:\work\workspace\FocusMVN\src\main\webapp]
[INFO] Webapp assembled in [3198 msecs]
[INFO] Building war: J:\work\workspace\FocusMVN\target\myproject.war
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ FocusMVN ---
[INFO] Installing J:\work\workspace\FocusMVN\target\myproject.war to C:\Users\mansoork\.m2\repository\ca\utoronto\med\dc\FocusMVN\0.0.1-SNAPSHOT\FocusMVN-0.0.1-SNAPSHOT.war
[INFO] Installing J:\work\workspace\FocusMVN\pom.xml to C:\Users\mansoork\.m2\repository\ca\utoronto\med\dc\FocusMVN\0.0.1-SNAPSHOT\FocusMVN-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

任何指针将不胜感激。

【问题讨论】:

  • 您可以将antrun 绑定到prepare-package 相位而不是package 一个。
  • @Andrew Logvinov 谢谢;它似乎没有什么区别。我已经用 mvn 输出更新了我的问题,你能看看吗?
  • 你使用哪个 maven 版本?
  • @khmarbaise,我使用的是 Maven 3.0.4

标签: maven maven-profiles maven-antrun-plugin


【解决方案1】:

你注意到这行了吗

[INFO] Copying webapp resources [J:\work\workspace\FocusMVN\src\main\webapp]

发生了什么事?

maven-war-pluginsrc/main/webapp 的内容(其中包含您的dev project.properties)复制到战争中。在执行此操作时,它会替换刚刚被 ant 任务复制的那个。

您可以尝试从 maven-war-plugin 复制的文件集中排除 project.properties(因为它已被您的 ant 任务复制。)

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>     
    <configuration>
       <warSourceExcludes>WEB-INF/project.propterties</warSourceExcludes>
    </configuration>
</plugin>

reference

【讨论】:

  • 你的意思是warSourceExcludes?
【解决方案2】:

阶段使用prepare-package代替package

而不是 maven-antrun-plugin 尝试使用 copy-maven-plugin

<plugin>
            <groupId>com.github.goldin</groupId>
            <artifactId>copy-maven-plugin</artifactId>
            <version>0.2.5</version>
            <executions>
                <execution>
                    <id>create-archive</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                            <targetPath>${basedir}/target/</targetPath>
                            <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                            <includes>
                                <include>**/project*</include>
                            </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

【讨论】:

  • +1:你打败了我! :) 此外,请查看此处描述的阶段列表:sonatype.com/books/mvnref-book/reference/…
  • @Carlos Rodrigues 感谢您的评论。我已经用 mvn 输出更新了我的问题,使用 prepare-package 也没有帮助。你能看看吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2015-11-26
  • 2019-10-13
相关资源
最近更新 更多