2012-10-02 8 views
5

私はこれらのソースからJavaソースと一連のjarファイルを生成するタスクを持っています(例えば、プロジェクトa)。これらのjarファイルを依存プロジェクト(例えば、bプロジェクト)にエクスポートしたいと思います。だからここに私が今持っているものおおよそです:Gradle - タスクの出力をプロジェクトの依存関係に含めることはできますか

//a.gradle 

configurations{ 
    generatedJars 
} 

task generateJars(type: JavaExec) { 
    //generate jars ... 

    outputs.files += //append generated jars here 
} 

dependencies{ 
    generatedJars generateJars.outputs.files 
} 


//b.gradle 

dependencies{ 
    project(path: ':a', configuration: 'generatedJars') 
} 

それは依存性が、それはまだ発生した一切のjarファイルが存在しないときgenerateJarsタスクを実行するために持っているのGradleを教えてくれないとそれがgenerateJars.outputs.filesを追加することを除いて、[OK]を動作します。私は、アーティファクト設定(例えばartifacts{ myJarTask })にjar/zipタスクを追加するときと同じように動作することを望む依存関係としてタスク自体を追加しようとしましたが、私にはできないことを伝えるエラーがスローされますそれ。もちろん、:bが評価を開始する前に、generateJarsタスクをビルドプロセスのどこかに注入することができますが、それは不器用で脆いので、私はそれを避けたいと思います。

生成されたjarファイルをプロジェクトのartifacts{ ... }に追加する必要があるような気がしますが、それらを従属プロジェクトに表示する方法がわかりません。これを達成するより良い方法はありますか?

依存プロジェクト(プロジェクトb)は、プロジェクトaの生成されたjarを指すように、IntelliJ IDEAモジュールのクラスパス設定を行う必要があります。むしろこのような何か(擬似コード):

//b.gradle 

idea{ 
    module{ 
    scopes.COMPILE.plus += project(path: ':a', configuration: 'generatedJars').files 
    } 
} 

は、これまでのところ、私は:a年代:bgeneratedJarsにプロジェクトdependecyを追加するだけで試してみましたが、アイデアのプラグインは、単純にモジュールの依存関係としてモジュール:aを追加していることを前提としてい生成されたjarをエクスポートします(これはおそらく正しい仮定です)。したがって、生成されたjarファイルを:bのクラスパスに追加しないでください。

ご協力いただければ幸いです!

答えて

2

まず、別の設定が必要ですか?つまり、aのクライアントはではなく、のJARファイルを参照してください。そうでない場合は、生成されたJarsをarchivesコンフィグレーションに追加すると、簡単になります。

第二に、コンフィギュレーションに生成されたjarファイルを追加するための正しい方法は、(代わりにdependenciesブロックの)です:

artifacts { 
    generatedJars generateJars 
} 

これは、必要なときにgenerateJarsタスクが自動的に実行されることを確認する必要があります。

第3に、outputs.filesの後に+=を省略しますが、違いはありません。また、必要な入力を追加する必要があります。

第4に、Jarsを生成するために、なぜタスクが必要ですか?代わりに生成されたソースをいくつかのソースセットに追加し、Gradleにそれらをビルドさせることができますか?

第5に、IDEAには、Gradleのプロジェクト構成の依存関係に対応する概念がありません。 IDEAモジュールは完全に別のモジュールに依存するか、まったく依存しません。モジュール依存関係を使用し、生成されたソースを依存モジュールのソースフォルダ(好ましくは、GradleとIDEAビルドの両方)にするか、生成されたJarsを外部依存関係としてIDEAに渡します。どちらの場合でも、おそらくideaModuleから適切な生成タスクにタスク依存関係を追加する必要があります。これでもまだIDEAの設定がうまくいかない場合は、Jarsの生成を別のサブプロジェクトに移動することについて考えることができます。

+0

ありがとうございました。 'artifacts'へのタスクの追加はモジュール内でうまくいきますが、プロジェクトbからそれらのjarをどのように参照することはできません(公開せずに)。はい、ソースを生成してモジュールソースとしてエクスポートすることは可能です。これはうまくいくはずですが、それはIDEAのための余分な作業を作成するので、私はそれが何とか回避されることを望んでいました。 'ideaModule - > generateJars'のフックをうまく動作させるために、' b:ideaModule - > a:ideaModule'も追加する必要があります。私は何とか自動解決のためにそれを設定できることを期待していました。 – rodion

+0

広告1. 'プロジェクト(パス: 'a'、構成: 'generatedJars')' –

+0

ad 2.「余分な仕事」は関係しますか? (あなたは、非生成コードに同じ引数を使うことができます)。いずれの場合でも、JavaExecタスクではなく、Gradleを使ってファイルをコンパイルしてください。 –

関連する問題