2011-01-14 1 views
0

私はGradleの仕組みについて何か不足しているかもしれません。ここで私が持っているのは、構成のみを含む親プロジェクトです。つまり、ビルド時にアーティファクトが作成されず、すべてのサブプロジェクトを管理してビルドするだけです。Gradleは、fileTreeを使ってサブプロジェクトに依存関係を注入できません

今のサブプロジェクトは、いくつかの依存関係の設定を共有するので、私は、私は、ルートプロジェクトのbuild.gradleに何をするのかを考え出したことは次のとおりです。

subprojects { 
    dependencies { 
    compile fileTree(dir: 'lib', includes: ['*.jar']) 
    }  
} 

ただし、動作しません、それはかなりあいまいなエラーで失敗した、ということメッセージ:

問題が発生しました評価ルート プロジェクト 'qype-アンドロイド' 原因:メソッドの無 署名: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.compile() は、引数の型に適用されます: (org.gradle.api.internal.file.DefaultConfigurableFileTree) 値:[ファイルセット 'libに']可能な ソリューション:モジュール(java.lang.Object)メソッド

後いくつか試行錯誤して、私はこの問題を "java"プラグインを親プロジェクトに適用することで "修正"することができました。

どうしてですか? Gradleのドキュメントから、fileTreeの依存関係にはJavaプラグインが必要であると私は見ていません。それでも、設定されているプロジェクトではなく、設定を注入しているプロジェクトで、なぜそれが必要なのでしょうか(サブプロジェクトはすべてJavaプラグインを適用します)。

異なるN個のサブプロジェクトがあり、異なるプラグインを適用すると、親プロジェクトは常にのセットを適用する必要があることを意味しますか?プラグインの存在自体も使用されますか?

答えて

2

'java'プラグインが必要なのはfileTreeではありません。

定義されていないcompile依存関係の設定に関するエラーメッセージが表示されます。 Javaプラグインはこの構成を定義しているため、依存関係(fileTreeを含む)を追加することができます。

+0

私は感謝します - ありがとう。しかし、私はそれがJavaプロジェクトではないとき、私が親プロジェクトにJavaプラグインを適用する必要があることが気にかかっています。 – Matthias

+1

しかし、Javaプロジェクトをルートプロジェクトに適用する必要はありません: 'apply plugin: 'java''命令を' subproject'セクションに追加します。 –

+0

が奇数です。私はそこに置かなかったが、すべてのサブプロジェクトのbuild.gradleに 'apply plugin: 'java'という名前を付けた。 'subprojects'ブロックでそれを行うことの違いは、サブプロジェクトのビルドファイルで行うのと比べて何ですか? – Matthias

関連する問題