9

カスタム Maven プラグインを開発しようとしています。単体テストを実行すると、現在この問題が発生しています。java.lang.NoClassDefFoundError: org.eclipse.aether.RepositorySystemSessionスタック トレースは以下のとおりです。

initializationError(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(ネイティブメソッド)
    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用のプラグインを構築しようとしています。これは、すべてのワークステーションにインストールされているためです。依存関係の 1 つが 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>
4

3 に答える 3

10

eclipse aether 依存関係に移行するよりもやや混乱しますが、多くの依存関係のmaven-plugin-testing-harnessスコープが からcompileに変更されたためprovided、下流の依存関係によって解決されません。

これは実際にFedoraでも経験されたようで、1年以上注目されていないApacheでこの問題を提起しました...

彼らのApacheバグでは、依存関係を追加する必要があると述べていますがmaven-core, maven-model, maven-aether-provider、依存関係を確認すると、maven-plugin-testing-harness他のprovidedスコープの依存関係があります。

プラグイン テスト ハーネス 3.3 で動作するようにすべてを説得するために追加しなければならなかった依存関係は次のとおりです。

<dependency>
    <groupId>org.apache.maven.plugin-testing</groupId>
    <artifactId>maven-plugin-testing-harness</artifactId>
    <version>3.3.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-compat</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-core</artifactId>
    <version>3.3.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>maven</groupId>
    <artifactId>maven-model</artifactId>
    <version>3.0.2.javadoc</version>
    <type>javadoc.jar</type>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-aether-provider</artifactId>
    <version>3.3.3</version>
    <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>3.3.3</version>
</dependency>
<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.2</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.codehaus.plexus</groupId>
  <artifactId>plexus-utils</artifactId>
  <version>3.0.15</version>
</dependency>
于 2015-08-04T14:50:32.147 に答える
1

したがって、興味深く奇妙なことに、上記の回答は私にとってはうまくいきませんでした。いくつか掘り下げましたが、何も見つかりませんでした。プラグイン URL: http://maven.apache.org/plugin-testing/maven-plugin-testing-harness/dependency-convergence.html

「依存関係の収束」セクションでは、プラグインが確実に「点灯」するために必要なすべての依存関係のバージョンを提供します。ほんの数秒ですべてが機能しました。これが私が最終的に私のpomに持っていたもののスニペットです:

    <dependency>
        <groupId>org.apache.maven.plugin-testing</groupId>
        <artifactId>maven-plugin-testing-harness</artifactId>
        <version>3.3.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-compat</artifactId>
        <version>3.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>3.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-model</artifactId>
        <version>3.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-aether-provider</artifactId>
        <version>3.2.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-plugin-api</artifactId>
        <version>3.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugin-tools</groupId>
        <artifactId>maven-plugin-annotations</artifactId>
        <version>3.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <type>jar</type>
        <scope>test</scope>
    </dependency>

これが誰かを助けることを願っています:)

于 2017-06-21T09:59:27.213 に答える