我有一个Java EE-web应用程序,为了将我的项目与oc4j应用程序服务器一起使用,必须在我的构建生命周期中修补它以避免出现多个问题。实际上,我是通过maven-antrun-plugin
来做到的,效果很好。我必须删除,将一些特殊库复制到WEB-INF/lib
并编辑web.xml
,以避免与EL函数和类加载问题发生冲突。
根据maven lifecycle phases我选择阶段prepare-package
:此阶段在war
文件打包之前执行,但不幸的是,在(重新)源被复制到临时工作目录。我不喜欢在源文件夹上工作,因为它们受版本控制,我不想让我的同事意外地提交它们,因为构建工具修改了它们。
所以maven将所有(重新)源代码复制到target/__finalName__
,我想要修复项目以便与oc4j一起使用。因为这个文件夹是临时的,将被打包到war文件中。不幸的是,复制和打包是在生命周期package
中完成的。
那么如何才能在复制资源和资源以及真正的包装之间取得进展呢?
prepare-package
此示例不起作用,因为${project.build.directory}/${build.finalName}
不存在,并且在此阶段未复制ojdbc14.jar。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>patch-oc4j</id>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Patching distribution for OC4J</echo>
<echo>Deleting the obsolete OJDBC library</echo>
<delete file="${project.build.directory}/${build.finalName}
/WEB-INF/lib/ojdbc14.jar" />
[... more patching ...]
</tasks>
</configuration>
</execution>
</executions>
</plugin>
答案 0 :(得分:1)
你不能为此使用个人资料吗?也许是这样的:
<profiles>
<profile>
<id>oc4j</id>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</profile>
</profiles>
答案 1 :(得分:0)
我必须删除,将一些特殊的库复制到WEB-INF / lib并编辑web.xml,以避免与EL函数和类加载问题发生冲突。
听起来你可能,至少部分地用Build Profiles做这件事。你对上述问题的动机有点短,但如果你详细说明我们可以更好地判断......