在使用WAR之前,使用Maven将文件复制到WEB-INF

时间:2012-09-26 21:15:00

标签: maven weblogic war maven-antrun-plugin

我的webapp中有两个servlet配置文件,一个用于我们的普通环境(Heroku),另一个用于WebLogic。我有一个Maven配置文件用于我们的WebLogic构建,它应该将“servlet-context.xml.weblogic”复制到“servlet-context.xml”。除了在构建war文件之后进行复制之外,所有内容似乎都在工作,因此正确的servlet上下文不会包含在包中。在maven-antrun-plugin中使用正确的构建阶段以正确完成复制?

以下是我的POM.xml文件的相关部分:

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
    <phase>test</phase>
    <goals>
      <goal>run</goal>
    </goals>
    <configuration>
      <tasks>
        <move
          file="${project.build.directory}/${project.build.finalName}/WEB-INF/spring/appServlet/radio-context.xml.weblogic"
          tofile="${project.build.directory}/${project.build.finalName}/WEB-INF/spring/appServlet/radio-context.xml"/>
      </tasks>
    </configuration>
    </execution>
  </executions>
</plugin>

此操作失败,并显示以下错误:

Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.3:run (default) on project radio: An Ant BuildException has occured: Warning: Could not find file C:\workspace\radio\target\radio-1.0.0-BUILD-SNAPSHOT\WEB-INF\spring\appServlet\radio-context.xml.weblogic to copy. -> [Help 1]

但是,如果我将<phase>更改为package,则副本有效,但在战争结束后。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

作为参考,this page列出了Maven生命周期阶段。

您需要在构建中考虑的关键阶段是:

  • process-resources - 其中大部分文件都放在${project.build.directory}
  • package - 这是构建WAR的阶段

但是...

查看WAR plugin的文档,将WAR资源复制到${project.build.directory}/${project.build.finalName}发生在war:war目标中,该目标也在package阶段执行。

让我们退后一步。您希望实现的是根据您的个人资料使用不同的radio-context.xml文件。也许更好的方法是在weblogic配置文件中以不同方式配置WAR插件。

为您的weblogic创建一个单独的webapp资源目录,将自定义的radio-context.xml文件放在那里,并且只在weblogic配置文件中包含该目录。 e.g。

<project>
  ...

  <profiles>
    <profile>
            <id>weblogic</id>
            ...
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.2</version>
                        <configuration>
                            <webResources>
                                <resource>
                                    <directory>src/main/webapp-weblogic</directory>
                                </resource>
                            </webResources>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

答案 1 :(得分:2)

尝试使用 process-resources ,这会在构建战争之前复制您的文件。