Maven测试类路径无法引入WEB-INF/lib下JAR包的问题
解决Maven测试时无法加载WEB-INF/lib中jar的问题
你之前配置testResources的方式没用,原因很明确:这个配置只是把WEB-INF/lib里的jar文件复制到target/test-classes目录,但JVM不会自动把这些jar本身加入类路径——它们只是被当成普通资源文件存在,里面的类自然没法被加载。
给你几个可行的解决方案:
方案一:用Maven Dependency Plugin把WEB-INF/lib的jar加入测试类路径
这个插件能直接把指定目录下的jar添加到测试阶段的类路径中,配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>add-web-libs-to-test</id> <phase>test-compile</phase> <goals> <goal>add-test-dependency</goal> </goals> <configuration> <sources> <source> <directory>src/main/webapp/WEB-INF/lib</directory> <includes> <include>*.jar</include> </includes> </source> </sources> <scope>test</scope> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行mvn test时,插件会在测试编译阶段把WEB-INF/lib下的所有jar加入测试类路径,这样就能加载里面的类了。
方案二:直接在pom.xml中声明依赖(更规范)
如果WEB-INF/lib里的jar是第三方库,建议直接在pom里添加依赖,避免手动管理jar文件:
<dependencies> <dependency> <groupId>对应的groupId</groupId> <artifactId>对应的artifactId</artifactId> <version>版本号</version> <scope>test</scope> <!-- 仅测试时需要用这个scope;如果运行时也需要,改成compile --> </dependency> </dependencies>
如果是你自己的本地jar(没上传到仓库),可以用system scope指定路径:
<dependency> <groupId>自定义groupId</groupId> <artifactId>自定义artifactId</artifactId> <version>自定义版本</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/lib-abc.jar</systemPath> <scope>test</scope> </dependency>
方案三:用Surefire插件指定额外类路径
配置Maven Surefire插件,把WEB-INF/lib下的jar直接加入测试的类路径:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <additionalClasspathElements> <additionalClasspathElement>${project.basedir}/src/main/webapp/WEB-INF/lib</additionalClasspathElement> </additionalClasspathElements> </configuration> </plugin> </plugins> </build>
优先推荐方案一或方案二,更符合Maven的依赖管理规范,也能避免后续的路径问题。
内容的提问来源于stack exchange,提问作者mop
相关产品推荐
相关产品推荐

