0

我的 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]

但是,如果我将 更改<phase>package,则副本有效,但在战争建立之后。

任何帮助,将不胜感激。

4

2 回答 2

3

作为参考,此页面列出了 Maven 生命周期阶段。

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

  • process-resources- 大多数文件都放在哪里${project.build.directory}
  • package- 这是构建 WAR 的阶段

但...

查看WAR 插件的文档,将 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>
于 2012-09-27T06:25:52.387 回答
2

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

于 2012-09-27T03:24:26.697 回答