いくつかの一般的な設定に依存するモジュールのコレクション(Androidまたは純粋なJava)を含むかなり一般的なGradleライブラリプロジェクトがあります。Gradle buildSrcに1つ以上のプラグインクラスを定義できますか?
この一般的な構成は、「publishConfig.gradle」ファイル(必要なbuild.gradleファイルでapply
を介して読み込まれます)とbuildSrcでキャプチャされたカスタムタスクに抽象化されています。この質問は後者についてです。
buildSrcは、Plugin
を実装するクラスとプラグイン拡張クラスの2つのクラスを持つ1つのGroovyファイルとして、特定のパッケージ内のソース(Groovyとして)で構成される単一のモジュール/プロジェクトです。例えば、。:
org.clvrmnky.gradle.plugins.LibraryPlugin
この構成と定義されたタスクがエラーなしで動作します。問題はない。
私は別の理由で追加のカスタムタスクを追加したいと思います(これは、ルートプロジェクトへのサブモジュールが増えていくための共有カスタム設定の一部です)。新しいクラスを定義する並列クラスファイルを追加しましたプラグインクラスPlugin
を実装しています。例えば、。:
[...]
public class BuildBreaker implements Plugin<Project> {
static def authString = fetchSonarAuthString()
@Override
void apply(Project project) {
project.extensions.create("buildbreaker", BuildBreakerExtension)
project.task([
description: 'Fail this task if the Sonarqube Quality Gate does not pass.',
dependsOn: ["sonarqube"]
], 'breakOnBadQualityGate') {
[...]
、クラスおよびタスクの方法を同様に定義されるが、異なる文字列識別子を有するされている。参考
org.clvrmnky.gradle.plugins.BuildBreaker
、ここでクラスおよびタスク定義の抜粋です。しかし
、私はこれを行うとき、私は定義新しいタスクがルートプロジェクトまたはプロジェクトのいずれかのサブモジュールには見えません。
PS C:\rd\SOPLibs\Commons> .\gradlew.bat breakOnBadQualityGate
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy UP-TO-DATE
[...]
FAILURE: Build failed with an exception.
* What went wrong:
Task 'breakOnBadQualityGate' not found in root project 'Commons'.
* Try:
Run gradlew tasks to get a list of available tasks. Run with --stacktrace option
to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
build
ディレクトリはすべてのソースのためのクラスが含まれ、そこにあります実行時にと仮定して、というクラスを含むlib jarがGradleクラスパスに供給されています。つまり、これは間違いなく構築とパッケージ化です。
私は、マルチプロジェクトのbuildSrcプロジェクトでbuildSrc build.gradleを調整して、すべてのjarファイルを実行時にクラスパス上に配置する必要があるというヒントを見ましたが、この場合は複数のPluginタスクを持つ単一のjarファイルがあります。
また、BuildBreakerクラスを別のパッケージに移動しようとしましたが、これで問題は解決されませんでした。
クラス名が異なる場合でも、複数のPlugin
クラスを単一のbuildSrcに実装できませんか?あるいは、これらを複数のbuildSrcプロジェクトに分割する必要がありますか?
くそまでは有効になりません。もちろん。そこに、私はそれを置く各モジュールbuild.gradleの最初のプラグインです。私はクラスの可視性と関係がありました。 – jdv