Maven WAR外部依赖覆盖:将WEB-INF/lib-new下JAR移至WEB-INF/lib
解决方案
当然可以,无需修改Tomcat配置,通过调整Maven构建插件的配置就能实现将lib-new中的JAR包迁移到lib目录的需求,以下是两种可靠的实现方式:
方式一:直接通过maven-war-plugin的Overlay配置重定向
利用maven-war-plugin的overlay特性,在合并WAR-DEP时直接将其WEB-INF/lib-new下的JAR包映射到当前项目的WEB-INF/lib目录,同时排除原lib-new目录。
在项目的pom.xml中修改maven-war-plugin的配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <configuration> <overlays> <overlay> <groupId>com.example</groupId> <!-- WAR-DEP的groupId --> <artifactId>WAR-DEP</artifactId> <!-- WAR-DEP的artifactId --> <includes> <!-- 保留原lib目录的内容 --> <include>WEB-INF/lib/**</include> <!-- 将lib-new下的JAR包纳入,后续重定向到lib --> <include>WEB-INF/lib-new/*.jar</include> </includes> <excludes> <!-- 排除原lib-new目录,避免最终WAR中出现该目录 --> <exclude>WEB-INF/lib-new/</exclude> </excludes> <targetPath>/</targetPath> <resource> <!-- 单独配置lib-new下JAR的目标路径 --> <directory>WEB-INF/lib-new</directory> <includes> <include>*.jar</include> </includes> <targetPath>WEB-INF/lib</targetPath> </resource> </overlay> </overlays> </configuration> </plugin>
这个配置会在Overlay合并阶段,直接把WAR-DEP中lib-new下的JAR包复制到最终WAR的WEB-INF/lib,同时不保留lib-new目录。
方式二:使用maven-antrun-plugin执行文件移动操作
如果方式一无法满足需求(比如WAR-DEP的结构更复杂),可以用maven-antrun-plugin在WAR打包前执行文件移动和删除操作:
在pom.xml中添加以下插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>move-lib-new-to-lib</id> <!-- 在prepare-package阶段执行,确保在WAR打包前完成操作 --> <phase>prepare-package</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <!-- 将target目录下overlay解压后的lib-new中的JAR移动到lib目录 --> <move todir="${project.build.directory}/${project.build.finalName}/WEB-INF/lib"> <fileset dir="${project.build.directory}/${project.build.finalName}/WEB-INF/lib-new"> <include name="*.jar"/> </fileset> </move> <!-- 删除空的lib-new目录 --> <delete dir="${project.build.directory}/${project.build.finalName}/WEB-INF/lib-new"/> </target> </configuration> </execution> </executions> </plugin>
这个配置会在prepare-package阶段(WAR打包前),将Overlay合并后生成的临时目录中的lib-new下的JAR移动到lib,再删除lib-new目录。
两种方式都不需要修改Tomcat的类路径配置,建议优先尝试方式一,因为它直接集成在WAR打包的Overlay流程中,更简洁高效。
内容的提问来源于stack exchange,提问作者zerocool
相关产品推荐
相关产品推荐

