我的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
,则副本有效,但在战争结束后。
任何帮助都将不胜感激。
答案 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 ,这会在构建战争之前复制您的文件。