Gmavenplus Plugin无法解析依赖类问题求助
解决gmaven-plus-plugin编译时找不到依赖类的问题
问题分析
你的场景是Maven项目仅包含test目录的Groovy Spock测试,main目录无代码,虽已引入主应用jar依赖,但编译阶段gmaven-plus-plugin报错找不到依赖类。核心原因是gmaven-plus-plugin默认会编译main目录代码,但你的main目录为空,插件可能在执行主源码编译阶段时,错误地尝试解析测试代码中引用的依赖类,或是插件配置未正确区分主源码与测试源码的编译范围。
解决方案
1. 调整gmaven-plus-plugin配置,仅编译测试源码
修改pom.xml中的插件配置,明确指定只处理test目录的Groovy代码,跳过main目录的编译:
<plugin> <groupId>org.codehaus.gmavenplus</groupId> <artifactId>gmaven-plus-plugin</artifactId> <version>1.13.1</version> <!-- 使用最新稳定版本 --> <executions> <execution> <id>compile-tests</id> <goals> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <testSources> <testSource> <directory>${project.basedir}/src/test/groovy</directory> <includes> <include>**/*.groovy</include> </includes> </testSource> </testSources> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>3.0.17</version> <!-- 与你的Spock版本匹配 --> <type>pom</type> </dependency> </dependencies> </plugin>
关键是只保留testCompile目标,不要包含compile目标,确保插件仅编译测试代码,不处理空的main目录。
2. 确认主应用依赖的scope配置
确保主应用jar的依赖不是test scope(测试代码需要依赖类在编译阶段可见),避免依赖在测试编译阶段不可用:
<dependency> <groupId>com.spas.shiproute</groupId> <artifactId>routepricer-main</artifactId> <version>你的版本号</version> <!-- 不要设置为<scope>test</scope>,除非明确需求 --> </dependency>
3. 清理Maven缓存并重新构建
执行以下命令清理本地仓库缓存,排除依赖缓存问题:
mvn clean install -U
验证步骤
- 执行
mvn compile,因main目录为空,且插件仅配置了testCompile目标,不会触发gmaven-plus-plugin的编译操作 - 执行
mvn test,插件会编译test目录的Groovy代码并执行测试,此时应能正确加载主应用的类
内容的提问来源于stack exchange,提问作者Ambuj Jauhari
相关产品推荐
相关产品推荐

