Maven Embedded在我的Maven项目中报错的原因是什么?
内嵌Maven执行编译时出现RepositorySystem绑定错误
执行代码
System.setProperty("maven.multiModuleProjectDirectory", projectRoot.getAbsolutePath()); MavenCli cli = new MavenCli(); cli.doMain( new String[] {"clean","install"}, projectRoot.getAbsolutePath(), System.out, System.err);
错误日志
[2023-05-31 16:52:02.450] [ERROR] [main] o.a.m.c.MavenCli [CLIReportingUtils.java:142] Error executing Maven. [2023-05-31 16:52:02.452] [ERROR] [main] o.a.m.c.MavenCli [CLIReportingUtils.java:145] com.google.inject.ProvisionException: Unable to provision, see the following errors: 1) No implementation for RepositorySystem was bound. while locating DefaultProjectBuildingHelper at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] \_ installed by: WireModule -> PlexusBindingModule while locating ProjectBuildingHelper while locating DefaultProjectBuilder at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] \_ installed by: WireModule -> PlexusBindingModule while locating ProjectBuilder while locating DefaultMaven at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] \_ installed by: WireModule -> PlexusBindingModule while locating Maven 1 error ====================== Full classname legend: ====================== DefaultMaven: "org.apache.maven.DefaultMaven" DefaultProjectBuilder: "org.apache.maven.project.DefaultProjectBuilder" DefaultProjectBuildingHelper: "org.apache.maven.project.DefaultProjectBuildingHelper" Maven: "org.apache.maven.Maven" PlexusBindingModule: "org.eclipse.sisu.plexus.PlexusBindingModule" ProjectBuilder: "org.apache.maven.project.ProjectBuilder" ProjectBuildingHelper: "org.apache.maven.project.ProjectBuildingHelper" RepositorySystem: "org.apache.maven.repository.RepositorySystem" WireModule: "org.eclipse.sisu.wire.WireModule" ======================== End of classname legend: ======================== role: org.apache.maven.Maven roleHint:
当前POM依赖
<dependencies> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>6.5.0.202303070854-r</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.gitlab4j</groupId> <artifactId>gitlab4j-api</artifactId> <version>5.2.0</version> <exclusions> <exclusion> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> </exclusion> <exclusion> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> </exclusion> <exclusion> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.28</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.8.0</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>5.3.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> <version>3.9.1</version> <scope>test</scope> </dependency> </dependencies>
环境信息
- JDK 11
- Maven 3.9.2
解决方案
该错误是由于maven-embedder依赖缺少必要的组件,导致Guice无法找到RepositorySystem的实现类。需要在POM中补充以下依赖:
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> <version>3.9.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-compat</artifactId> <version>3.9.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-connector-basic</artifactId> <version>2.0.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-transport-http</artifactId> <version>2.0.1</version> <scope>test</scope> </dependency>
注意保持所有Maven相关依赖的版本与maven-embedder一致(这里为3.9.1),补充后Guice就能正确绑定RepositorySystem的实现,解决依赖注入失败问题。
内容的提问来源于stack exchange,提问作者javydreamercsw
相关产品推荐
相关产品推荐

