2012-02-20 9 views
1

私はMaven 2 - different dependency versions in test and compileに似た問題を抱えていますが、指定された答えが機能しません。Maven - テストで異なる依存関係のバージョン

私のプロジェクトでは、ClauderaのHadoopディストリビューションとJUnitテスト用の 'vanilla'バージョンに依存する必要があります。これは前者が* nixでしか動作しないためです。

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

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

<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:listcompileがまったくバージョンをスコープ表示されない、次のことを示しています

[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 
+0

'hadoop-core'の' mvn dependency:list'は何を表示しますか? – Raghuram

+0

@Raghuram私はこれを示すために質問を編集しました。ありがとう! –

答えて

1

は、Mavenのバグのように見える - またはそうでない場合、私は信用しないだろう十分な生臭い何かもしあれば、ドキュメンテーション。あなたのケースでは

、私はおそらくです:

  1. アップグレードMavenと問題が最新立方メートル
  2. に固定されているかどうかを見るには、別のアーティファクトIDまたはグループ名でのHadoopのバージョンのうちの1つを再パッケージしてみてください。 maven-shade-plugin、パッケージ名を変更する必要はありませんが、mavenが認識しない何かをorg.apache.hadoopと全く同じで紹介してください:hadoop-core
  3. テストを別のプロジェクトの下流に移動してみてください
  4. あなたが望む何
  5. 開始デバッグMavenと正確に何が起こっているかを理解する(その後、1または2に頼る...)
+0

ありがとうございました!私はオプション2を試しましたが、不思議なことにそれはまだ同じ動作を示しました。問題の原因となっている.jarsに何かがあるかどうか疑問に思っていますか? –

+0

2を試してみるときは、完全に陰影をつけていることを確認してください。元のアーティファクトに過渡的に依然として依存している場合は、動作しません。 – ptyx

4

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

org.apache.hadoop:hadoop-core:1.0.0:testorg.apache.hadoop:hadoop-core:0.20.2-cdh3u2:compileを上書きするため、最も近い依存関係になります。あなたは、あなたのプロジェクトのモデルでは、このことの問題を暗示mvn dependency:list目標を実行するときにMavenによって表示され、次の警告が、表示されることがあります。

[WARNING]「dependencies.dependency(のgroupId:たartifactId:タイプ:クラシファイア)。 ':org.apache.hadoop: 一意でなければなりませんHadoopのコア:jarファイル - >バージョンラインのxyz @ 1.0.0 VS 0.20.2-cdh3u2、

に列xyzの 'この' 修正、それは次のようになりますプロジェクトモデルが別個のテスト依存関係のセットを定義できる別個のプロジェクトにテストを分割するほうがよいでしょう。

関連する問題