6

Java ソースとこれらのソース (たとえば、 project a) から一連の jar を生成するタスクがあります。これらの jar を依存プロジェクト (たとえば、 project ) にエクスポートしたいと思いますb。だからここに私が今持っているものがあります:

//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.outputs.filesを実行する必要があることをgradleに伝えないことを除いて、問題なく動作します。generateJarsjar/zip タスクをアーティファクト構成に追加したときと同じように機能することを期待して、タスク自体を依存関係として追加しようとしましたが (例: artifacts{ myJarTask })、それができないというエラーがスローされます。 . もちろん、評価を開始generateJarsする前のビルド プロセスのどこかにタスクを挿入することもできます:bが、それは不器用で脆いので、避けたいと思います。

生成されたjarをプロジェクトに追加する必要があるように感じますがartifacts{ ... }、それらを依存プロジェクトに表示する方法がわかりません。これを達成するためのより良い方法はありますか?

依存プロジェクト ( project ) は、 IntelliJ IDEA モジュールのクラスパスを設定して、 projectの生成された jarbを指す必要があります。aこのようなもの(疑似コード):

//b.gradle

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

これまでのところ、プロジェクト:aの依存関係をgeneratedJarsinに単純に追加しようとしました:bが、Idea プラグインは単にモジュール:aをモジュールの依存関係として追加し、生成された jar をエクスポートすると想定するため (これはおそらく正しい想定です)、生成された jar を に追加しません。:bのクラスパス。

どんな助けでも大歓迎です!

4

2 に答える 2

2

まず、別の構成が必要ですか? つまり、生成された Jar を表示しaないクライアントはありますか? そうでない場合は、生成された Jar を構成に追加できarchivesます。これにより、作業が簡素化されます。

次に、生成された Jar を構成に追加する正しい方法は (dependenciesブロックではなく):

artifacts {
    generatedJars generateJars
}

これによりgenerateJars、必要なときにタスクが自動的に実行されるようになります。

第三に、違いはないかもしれませんが、 +=afterを省略します。outputs.files必要な入力も追加する必要があります。

JavaExec4 番目に、Jar を生成するタスクが必要なのはなぜですか? 代わりに、生成されたソースを何らかのソース セットに追加して、Gradle にビルドさせることはできますか?

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

于 2012-10-05T18:50:57.727 に答える