1

私はMaven 2 に似た問題に苦しんでいます - テストとコンパイルで依存関係のバージョンが異なりますが、そこで指定された答えは機能しません。

私のプロジェクトでは、Hadoop の Cloudera ディストリビューションと、JUnit テスト用の「バニラ」バージョンに依存する必要があります。前者は *nix でのみ動作するためです。

アプリケーションを実行しようとすると、Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration. Maven または Eclipse から JUnit テストを実行すると、すべて正常に動作します。依存関係をコメントアウトするtestと、アプリケーションは正常に実行されます。

依存関係のコメントを外すと依存compile関係が無視されるのはなぜですか?test

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>0.20.2-cdh3u2</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-test</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
    </dependency>

mvn dependency:list以下を示していますが、compileスコープ付きバージョンはまったく表示されていません。

[INFO] The following files have been resolved:
[INFO]    ant:ant:jar:1.6.5:test
[INFO]    aopalliance:aopalliance:jar:1.0:compile
[INFO]    asm:asm:jar:3.3.1:compile
[INFO]    cglib:cglib:jar:2.2.2:compile
[INFO]    ch.qos.logback:logback-classic:jar:1.0.0:compile
[INFO]    ch.qos.logback:logback-core:jar:1.0.0:compile
[INFO]    com.google.guava:guava:jar:r08:compile
[INFO]    com.h2database:h2:jar:1.3.164:test
[INFO]    com.jolbox:bonecp:jar:0.7.1.RELEASE:compile
[INFO]    com.sun.jersey:jersey-core:jar:1.11:test
[INFO]    commons-beanutils:commons-beanutils:jar:1.7.0:test
[INFO]    commons-beanutils:commons-beanutils-core:jar:1.8.0:test
[INFO]    commons-cli:commons-cli:jar:1.2:test
[INFO]    commons-codec:commons-codec:jar:1.4:test
[INFO]    commons-collections:commons-collections:jar:3.2.1:test
[INFO]    commons-configuration:commons-configuration:jar:1.6:test
[INFO]    commons-digester:commons-digester:jar:1.8:test
[INFO]    commons-el:commons-el:jar:1.0:test
[INFO]    commons-httpclient:commons-httpclient:jar:3.0.1:test
[INFO]    commons-lang:commons-lang:jar:2.4:test
[INFO]    commons-logging:commons-logging:jar:1.1.1:compile
[INFO]    commons-net:commons-net:jar:1.4.1:test
[INFO]    hsqldb:hsqldb:jar:1.8.0.10:test
[INFO]    junit:junit:jar:4.10:test
[INFO]    mysql:mysql-connector-java:jar:5.1.18:compile
[INFO]    net.java.dev.jets3t:jets3t:jar:0.7.1:test
[INFO]    net.sf.kosmosfs:kfs:jar:0.3:test
[INFO]    org.apache.commons:commons-math:jar:2.1:test
[INFO]    org.apache.ftpserver:ftplet-api:jar:1.0.0:test
[INFO]    org.apache.ftpserver:ftpserver-core:jar:1.0.0:test
[INFO]    org.apache.ftpserver:ftpserver-deprecated:jar:1.0.0-M2:test
[INFO]    org.apache.hadoop:hadoop-core:jar:1.0.0:test
[INFO]    org.apache.hadoop:hadoop-test:jar:1.0.0:test
[INFO]    org.apache.mina:mina-core:jar:2.0.0-M5:test
[INFO]    org.codehaus.jackson:jackson-core-asl:jar:1.0.1:test
[INFO]    org.codehaus.jackson:jackson-mapper-asl:jar:1.0.1:test
[INFO]    org.eclipse.jdt:core:jar:3.1.1:test
[INFO]    org.hamcrest:hamcrest-core:jar:1.1:test
[INFO]    org.liquibase:liquibase-core:jar:2.0.3:test
[INFO]    org.liquibase.ext:liquibase-slf4j:jar:0.0.1:test
[INFO]    org.mortbay.jetty:jetty:jar:6.1.26:test
[INFO]    org.mortbay.jetty:jetty-util:jar:6.1.26:test
[INFO]    org.mortbay.jetty:jsp-2.1:jar:6.1.14:test
[INFO]    org.mortbay.jetty:jsp-api-2.1:jar:6.1.14:test
[INFO]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[INFO]    org.mortbay.jetty:servlet-api-2.5:jar:6.1.14:test
[INFO]    org.slf4j:jcl-over-slf4j:jar:1.6.4:compile
[INFO]    org.slf4j:log4j-over-slf4j:jar:1.6.4:compile
[INFO]    org.slf4j:slf4j-api:jar:1.6.4:compile
[INFO]    org.springframework:spring-aop:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-asm:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-beans:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-context:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-context-support:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-core:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-expression:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-jdbc:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework:spring-test:jar:3.1.1.RELEASE:test
[INFO]    org.springframework:spring-tx:jar:3.1.1.RELEASE:compile
[INFO]    org.springframework.data:spring-data-hadoop:jar:1.0.0.BUILD-SNAPSHOT:c
ompile
[INFO]    oro:oro:jar:2.0.8:test
[INFO]    tomcat:jasper-compiler:jar:5.5.12:test
[INFO]    tomcat:jasper-runtime:jar:5.5.12:test
[INFO]    xmlenc:xmlenc:jar:0.52:test
4

2 に答える 2

6

あなたが望むものは、Maven 3 では有効ではなくなりました (これは以前は Maven 2 で有効でした)。Maven 3 は、最も近い依存関係を取得しようとします。これにより、コンパイルまたはテスト スコープの依存関係の 1 つだけがコンパイル フェーズとテスト フェーズの両方で使用されることが効果的に保証されます。

あなたの場合、org.apache.hadoop:hadoop-core:1.0.0:testオーバーライドorg.apache.hadoop:hadoop-core:0.20.2-cdh3u2:compileするため、最も近い依存関係になります。ゴールの実行時に Maven によって表示される次の警告が表示される場合がありmvn dependency:listます。これは、これがプロジェクト モデルの問題であることを示しています。

[警告] 'dependencies.dependency.(groupId:artifactId:type:classifier)' は一意である必要があります: org.apache.hadoop:hadoop-core:jar -> バージョン 0.20.2-cdh3u2 vs 1.0.0 @ 行 xyz、列xyz

これを「修正」するには、テストを別のプロジェクトに分割し、プロジェクト モデルで別のテスト依存関係のセットを定義できるようにすることをお勧めします。

于 2013-12-03T11:24:36.833 に答える
1

Maven のバグのように見えます。そうでない場合は、ドキュメントがあったとしても信頼できないほど怪しいものです。

あなたの場合、私はおそらく:

  1. Maven をアップグレードし、最新の m3 で問題が修正されているかどうかを確認します
  2. Hadoop バージョンの 1 つを別のアーティファクト ID またはグループ名で再パッケージ化してみてください。maven-shade-plugin、パッケージ名をわざわざ変更する必要はありませんが、maven が知らない何かを導入するだけで、org.apache.hadoop:hadoop-core と何ら変わりはありません
  3. テストを下流の別のプロジェクトに移動してみてください
  4. Mavenのデバッグを開始し、何が起こっているのかを正確に理解します(そして、1または2に戻ります...)
于 2012-02-20T17:57:30.620 に答える