我试图在项目中包含WAR,以扩展它,类似于问题How to extend/customize a WAR with another project。据我所知,这个answer(使用Maven WAR覆盖)似乎是我项目的正确选择。但是,我无法弄清楚如何让它发挥作用。
我在我的pom.xml中包含了Maven WAR插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
</plugin>
并将WAR添加为依赖项(本地存储库):
<dependency>
<groupId>nl.surfnet.apis</groupId>
<artifactId>apis-authorization-server-war</artifactId>
<version>1.3.6-SNAPSHOT</version>
<type>war</type>
</dependency>
当我现在编译和部署应用程序时,一切正常,父项目按原样部署。我只需要包含一个.properties文件,该文件不包含在WAR中,您可以在其中插入自己的类来覆盖项目的默认行为。
现在我想扩展一个类,添加一些自定义行为,但我无法弄清楚如何做到这一点。我的问题是,我甚至不能包括我想要扩展的类。据我所知,WARs不被认为包含在另一个项目中,因为它们旨在发布到容器服务器。但是,WAR Overlay插件是不是认为能够为您提供这种功能呢?
然后我发现Warpath plugin听起来就像我想要的那样:&#34;使用包含在war artifact / WEB-INF / classes目录中的类进行开发,方法是将它们包含在项目类路径中。 #34;
添加插件:
<plugin>
<groupId>org.appfuse</groupId>
<artifactId>maven-warpath-plugin</artifactId>
<version>2.0.2</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>add-classes</goal>
</goals>
</execution>
</executions>
</plugin>
和第二个依赖项(类型warpath),如插件文档中所述:
<dependency>
<groupId>nl.surfnet.apis</groupId>
<artifactId>apis-authorization-server-war</artifactId>
<version>1.3.6-SNAPSHOT</version>
<type>warpath</type>
</dependency>
然而,包括课程在内,似乎并没有起作用。 Netbeans告诉我,我尝试导入的包不存在。
奇怪的是,我现在可以部署我的项目,只要我不尝试使用我的新类,即使我在该类中引入语法错误,也可以正常工作。该课程似乎甚至不再被编译。
为了确保问题不是由于我试图扩展的项目,我写了两个新的最小测试项目,其中一个扩展另一个。我再次得到了相同的行为。我没有在这里包含这些项目,因为代码与上面提供的代码相同,只有另一个groupId
和artifactId
。