我正在尝试开发一个自定义 Maven 插件。当我执行单元测试时,我目前遇到了这个问题:java.lang.NoClassDefFoundError: org.eclipse.aether.RepositorySystemSession
堆栈跟踪如下:
初始化错误(com.mycompany.MyPluginTest) 经过时间:0 秒(TestSuite.java:132) 在 org.junit.internal.runners.JUnit38ClassRunner.(JUnit38ClassRunner.java:72) 在 org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:11) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 在 org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262) 在 org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 在 org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 在 org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) 在 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 引起:java.lang.ClassNotFoundException:org.eclipse.aether.RepositorySystemSession 在 java.net.URLClassLoader.findClass(URLClassLoader.java:423) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:660) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:346) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:626) 在 java.lang.J9VMInternals.verifyImpl(本机方法) 在 java.lang.J9VMInternals.verify(J9VMInternals.java:72) 在 java.lang.J9VMInternals.verify(J9VMInternals.java:70) 在 java.lang.J9VMInternals.initialize(J9VMInternals.java:134) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:44) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:516) 在 junit.framework.TestSuite.createTest(TestSuite.java:63) 在 junit.framework.TestSuite.addTestMethod(TestSuite.java:310) 在 junit.framework.TestSuite.addTestsFromTestCase(TestSuite.java:153) 在 junit.framework.TestSuite.(TestSuite.java:132) 在 org.junit.internal.runners.JUnit38ClassRunner.(JUnit38ClassRunner.java:72) 在 org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:11) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 在 org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262) 在 org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 在 org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 在 org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) 在 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
根据我的研究,为 Maven 3.1.x 构建时会发生这种情况,因为 Maven 从 sonatype aether 实现切换到 eclipse 实现。
我正在尝试为 Eclipse 3.0.4构建我的插件,因为这是我们所有工作站上安装的。我假设我看到此错误是因为我的依赖项之一是 Maven 3.1.x 依赖项,尽管我不确定是哪一个。有谁知道我应该纠正哪个依赖?
另外,有谁知道是否可以构建一个适用于 Maven 3.0.x 和 3.1.x 的插件?当我们转向更新版本的 Maven 时,我宁愿在未来的某一天不必再经历这一切。
我的 POM 中的依赖项如下所示:
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>