maven-war-plugin无法将单个Jar文件直接复制至WEB-INF/lib目录求助
解决maven-war-plugin复制Jar到WEB-INF/lib不带子目录的问题
方法一:调整maven-war-plugin的webResources配置
直接在<resource>节点中明确指定要复制的Jar文件,同时避免复制目录结构,修改后的完整配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <configuration> <webResources> <resource> <directory>${project.build.directory}/lib/v1</directory> <targetPath>WEB-INF/lib</targetPath> <includes> <include>myJar.jar</include> </includes> <includeEmptyDirs>false</includeEmptyDirs> </resource> </webResources> </configuration> </plugin>
关键配置说明:
<includes>:精准匹配需要复制的Jar文件,避免冗余内容被打包。<includeEmptyDirs>false</includeEmptyDirs>:防止空目录被纳入WAR包,确保仅复制目标文件。
若原配置未生效,大概率是因为${project.build.directory}/lib/v1目录在war插件执行时还未生成。需确保生成该目录及Jar文件的插件(如maven-dependency-plugin)在war插件之前执行——可通过<executions>节点指定插件执行阶段为prepare-package,war插件默认在package阶段执行,以此保证目录提前生成。
方法二:借助maven-resources-plugin复制文件
如果war插件的webResources配置仍有问题,可先用maven-resources-plugin将Jar文件复制到target/classes/WEB-INF/lib目录,war插件会自动将该目录内容打包进WAR的WEB-INF/lib:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-myjar</id> <phase>prepare-package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.outputDirectory}/WEB-INF/lib</outputDirectory> <resources> <resource> <directory>${project.build.directory}/lib/v1</directory> <includes> <include>myJar.jar</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin>
执行mvn clean package后,myJar.jar将直接出现在WAR包的WEB-INF/lib目录下。
内容的提问来源于stack exchange,提问作者Michail Touloupis
相关产品推荐
相关产品推荐

