2017-01-17 5 views
1

私は私のbuild.gradleに次き:Gradle :: runtime.excludeグループ: 'org.apache.hadoop'はテストスコープに影響しますか?

configurations { 
    runtime.exclude group: 'org.apache.spark' 
    runtime.exclude group: 'org.apache.hadoop' 
} 

と、これはまた、テストクラスパスからすべてのHadoop /スパークコードを除く何らかの理由で。私がこの設定をコメントアウトすると、テストはうまくいっています。そうでなければ、私はあらゆる種類のjava.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/MiniDFSCluster$Builderを発行します。

test { 
    classpath += configurations.compile 

}

ありません運:

私はこれを使用しようとしました。

私はここで何が欠けていますか?

答えて

1

グラデーションスコープでは、testruntimeを継承します。あなたのテストコードは、ランタイムがそれを除外するため、ミニクラスタ依存関係を除外しています。

Javaプラグインのスコープの継承ツリーのために、この図を参照してください: gradle configuration inheritance

代わりにグローバル実行時設定への除外を追加するのでは以降で使用可能ですcompileOnlyスコープの依存関係に火花の依存関係を作りたいかもしれませんグラデル2.12。 Gradleのスコープについて

configurations { 
    compileOnly 'org.apache.spark:spark:2.11' 
    test 'org.apache.hadoop:hadoop-minicluster:2.7.2' 
} 

詳しい情報はgradle manualで利用可能です。また

、あなたは、あなたのshadowJarの基礎としてそれを使用して、ランタイムから継承する他の構成を追加し、それに除外を追加することができます。これは、オプションで、spark依存関係がバンドルされているjarを構築する場合に役立ちます。テストでは除外なしで設定が使用されますが、パッケージ化したjarファイルにはスパークの依存関係は含まれません。

configurations { 
    sparkConfiguration { 
     extendsFrom runtime 
     exclude group: 'org.apache.hadoop' 
     exclude group: 'org.apache.spark' 
    } 
} 

task sparkExcludedJar(type: ShadowJar) { 
    group = "Shadow" 
    configurations = [project.configurations.sparkConfiguration] 
    classifier = 'sparkExcluded' 
} 
+0

私はそのようなことをやってしまってきたが - これらのHadoop /スパーク・グループと推移DEPSを排除しながら別の構成の参照を追加し、 'shadowJar'プラグインの実行中にその設定を使用していました。図と説明のために多くのありがとう! – jdevelop

関連する問題