【问题标题】:Use Maven to Copy Files to WEB-INF Before WAR is PackagedWAR打包前使用Maven复制文件到WEB-INF
【发布时间】:2012-09-26 21:14:59
【问题描述】:

我的 webapp 中有两个 servlet 配置文件,一个用于我们的正常环境 (Heroku),另一个用于 WebLogic。我有一个用于我们的 WebLogic 构建的 Maven 配置文件,它应该将“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]

但是,如果我将 &lt;phase&gt; 更改为 package,则副本可以工作,但在构建战争之后。

任何帮助将不胜感激。

【问题讨论】:

  • 你尝试process-resources阶段了吗?
  • 是的。请参阅下面的 cmets。 process-resources 发生在文件复制到目标目录之前。

标签: maven weblogic war maven-antrun-plugin


【解决方案1】:

作为参考,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 配置文件中。例如

<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>

【讨论】:

  • 这似乎是一个好方法,但目录需要是 src/main/webapp-weblogic/WEB-INF/spring/appServlet。这只是复制有问题的文件,保持 webapp 目录的其余部分完好无损,还是我必须在 src/main/webapp 中创建所有内容的副本?
【解决方案2】:

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

【讨论】:

  • 我试过这种方法,但是原文件还没有,所以复制失败。如果我尝试从 src/main/webapp 树中复制,他们的副本会在“打包”阶段被覆盖。
猜你喜欢
  • 2018-02-24
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多