私はこれらのソースから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
年代:b
でgeneratedJars
にプロジェクトdependecyを追加するだけで試してみましたが、アイデアのプラグインは、単純にモジュールの依存関係としてモジュール:a
を追加していることを前提としてい生成されたjarをエクスポートします(これはおそらく正しい仮定です)。したがって、生成されたjarファイルを:b
のクラスパスに追加しないでください。
ご協力いただければ幸いです!
ありがとうございました。 'artifacts'へのタスクの追加はモジュール内でうまくいきますが、プロジェクトbからそれらのjarをどのように参照することはできません(公開せずに)。はい、ソースを生成してモジュールソースとしてエクスポートすることは可能です。これはうまくいくはずですが、それはIDEAのための余分な作業を作成するので、私はそれが何とか回避されることを望んでいました。 'ideaModule - > generateJars'のフックをうまく動作させるために、' b:ideaModule - > a:ideaModule'も追加する必要があります。私は何とか自動解決のためにそれを設定できることを期待していました。 – rodion
広告1. 'プロジェクト(パス: 'a'、構成: 'generatedJars')' –
ad 2.「余分な仕事」は関係しますか? (あなたは、非生成コードに同じ引数を使うことができます)。いずれの場合でも、JavaExecタスクではなく、Gradleを使ってファイルをコンパイルしてください。 –