[Gradle-9] Gradle プラグイン リリース ガイド

1 はじめに

社内でもオープンソースでも、Gradle プラグインの公開は必須スキルとなるため、この記事では主にローカル公開とリモート公開の 2 つの方法を紹介します。

2. ローカルリリース

2.1. 依存関係を追加する

plugin>build.gradle ファイル (プラグイン プロジェクト) で、まず maven によって公開されたプラグインに依存します。'maven-publish'

plugins {
    
    
    id 'maven-publish'
}

dependencies {
    
    
    implementation 'com.android.tools.build:gradle:7.3.0'
}

2.2. リリース構成

Maven のリリース設定はpublishing { }クロージャで設定されます。
ローカル出版は主に 2 つの部分で構成されます。

  • GAV座標
  • 倉庫の住所
group 'com.yechaoa.plugin'
version '1.0.0'

publishing {
    
    
    // 配置Plugin GAV
    publications {
    
    
        maven(MavenPublication) {
    
    
            groupId = group
            artifactId = 'dependencies'
            version = version

            from components.java
        }
    }
    // 配置仓库地址
    repositories {
    
    
        maven {
    
    
            url layout.buildDirectory.dir("maven-repo")
        }
    }
}

2.3. リリースの実行

上記の構成が完了したら、公開操作を実行できます。

./gradlew publish

または、Android Studio の右側にある Gradle 視覚化パネルで [実行] をクリックしますpublish
公開.png

2.4. プロダクトの生成

不要な.png
maven-repoOK、ビルド フォルダーの下にローカル リリース構成用のフォルダーが作成されました。
主にjar/aarファイル、pomファイル、メタデータなどが正しいことを確認します。

2.5. 使用方法

OK、ローカル リリースは完了しました。このプラグインを使用する場合、プロセスは通常のプラグインへの依存と同じです。
3 つのステップ:

  1. settings.gradle ファイルでプラグイン ウェアハウスのアドレスを構成します。
pluginManagement {
    
    
    repositories {
    
    
        // ...
        maven {
    
    
            url './maven-repo'
        }
    }
}
  1. プラグインの依存関係をプロジェクト > build.gradle ファイルに追加します。
buildscript {
    
    
    dependencies {
    
    
        classpath('com.yechaoa.plugin:dependencies:1.0.0')
    }
}
  1. app:build.gradle ファイル内のプラグインに依存します
plugins {
    
    
    id 'com.yechaoa.plugin.dependencies'
}

上記の構成はすべて、使用する必要があるモジュールであるアプリ モジュールに追加されます。

注: ローカルの依存関係を使用する場合は、まず依存関係を公開してからプラグインに依存する必要があります。そうしないと、cannot found依存関係が見つからない可能性があります。

3. Maven リモートリリース

Maven は、プロジェクト オブジェクト モデル (POM) の概念に基づいたソフトウェア プロジェクト管理ツールです。Maven は、一元的な情報を通じてプロジェクトのビルド、レポート、ドキュメントを管理でき、最も一般的に使用されるリポジトリでもあります。

以上でローカル公開は完了しましたが、Maven のリモート公開では主にさまざまな設定が必要になります。
ローカル公開に基づいて、リモート公開にはいくつかの違いがあります。

  • ウェアハウスアカウントを登録します。
  • POM を構成します。
  • サイン;
  • リモート倉庫のアドレス。
  • ドメイン名を準備します。

もっと複雑です、それだけです。私はプロセス全体を通してあなたに同行したわけではありません。

例:

plugins {
    id 'java-library'
    id 'maven-publish'
    id 'signing'
}

group = 'com.example'
version = '1.0'

java {
    withJavadocJar()
    withSourcesJar()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifactId = 'my-library'
            from components.java
            versionMapping {
                usage('java-api') {
                    fromResolutionOf('runtimeClasspath')
                }
                usage('java-runtime') {
                    fromResolutionResult()
                }
            }
            pom {
                name = 'My Library'
                description = 'A concise description of my library'
                url = 'http://www.example.com/library'
                properties = [
                    myProp: "value",
                    "prop.with.dots": "anotherValue"
                ]
                licenses {
                    license {
                        name = 'The Apache License, Version 2.0'
                        url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id = 'johnd'
                        name = 'John Doe'
                        email = '[email protected]'
                    }
                }
                scm {
                    connection = 'scm:git:git://example.com/my-library.git'
                    developerConnection = 'scm:git:ssh://example.com/my-library.git'
                    url = 'http://example.com/my-library/'
                }
            }
        }
    }
    repositories {
        maven {
            // change URLs to point to your repos, e.g. http://my.org/repo
            def releasesRepoUrl = layout.buildDirectory.dir('repos/releases')
            def snapshotsRepoUrl = layout.buildDirectory.dir('repos/snapshots')
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}

signing {
    sign publishing.publications.mavenJava
}


javadoc {
    if(JavaVersion.current().isJava9Compatible()) {
        options.addBooleanOption('html5', true)
    }
}

プロセス全体については、以下を参照してください。

4、ジットパック

プロジェクトが GitHub でホストされている場合、最も一般的に使用される公開方法は、JitPackを使用することです。これは、シンプルで使いやすい Git パッケージ リポジトリです。使用と公開も非常に簡単です。登録する必要はありません。 Web サイトのアカウントを取得して多くの検証を実行するだけでなく、プロジェクトに侵入することもなく、サーバーやドメイン名も必要ありません。

4.1. GitHub ホスティングを使用する

最も基本的なことは、GitHub を使用してプロジェクトをホストすることです。つまり、プロジェクトをパブリックまたはプライベートのいずれかで GitHub にアップロードします。
たとえば、私の GradleX プロジェクトは次のとおりです。
github.png

4.2. リリース

何もする必要はなく、プロジェクトをアップロードするだけで、直接リリースプロセスに進むことができます。
リリース.png

プロジェクト ウェアハウスのホームページの右側にあるメニュー リストで、[リリース] を見つけて、[新しいリリースの作成] をクリックします。
すでにリリースされている場合は、ここにリリース記録が表示されます。それをクリックして「新しいリリースを作成する」をクリックします。
公開.png

  • バージョン番号であるタグを設定します。正式バージョンでない場合は、1.0-alpha のように末尾にアルファを追加できます。
  • リリース ブランチを選択します。
  • タイトルを公開する。
  • リリースの説明。
  • 「リリースを公開」をクリックして公開します。

発売完了後の商品やレコードもございます
製品と記録.png

4.3. 使用方法

上記のリリースが完了しましたが、どのように使用するのですか?
Jitpack 公式 Web サイト ( https://www.jitpack.io/ ) を開き、入力ボックスにyechaoa/GradleXユーザー名 + プロジェクトを入力します。
次に、Look up「検索と構築の開始」をクリックします。
入手.png
構築が完了し、Log ログが利用可能になったら、クリックしてGet it使用方法を取得できます。
使い方:

  1. まず、jitpack のウェアハウスアドレスを追加します。
  2. 次に、プロジェクトの依存関係を追加します。プロジェクトは GitHub に基づいてリリースされているため、ドメイン名のプレフィックスは com.github になり、カスタマイズではマッピングを追加する必要があります。

依存関係を追加するときは、複数のモジュールを含むプロジェクト全体を公開するため、個々の依存関係のサブモジュールを選択することもできます。
たとえば、私のプロジェクトでは、
依存関係.png
私のプロジェクトは GradleX、プラグイン モジュールはプラグイン、プラグインは依存関係です。最小の原則に従って、プラグインの依存関係に直接依存することを選択できますが、後で複数のプラグインがある場合は、プラグイン モジュールに依存することを選択できます。

4.4. 検証

リリースされたので、検証して試してみましょう。

まず、settings.gradle にウェアハウスを追加します。

	repositories {
    
    
        maven {
    
     url 'https://jitpack.io' }
    }

次に、依存関係を追加します。

	dependencies {
    
    
        classpath('com.github.yechaoa.GradleX:dependencies:1.0')
    }

プラグインに依存しているため、実装をクラスパスに置き換える必要があります。

最後に、プラグインに依存してプラグイン構成を開きます。

plugins {
    id 'com.yechaoa.plugin.dependencies'
}

printDependencies {
    enable = true
}

次に、同期して見てみましょう。

> Configure project :app
DependenciesPlugin >>>>> com.yechaoa.plugin.DependenciesPlugin
---hasProperty isTest no
DependenciesPlugin >>>>> 已开启依赖打印
DependenciesPlugin >>>>> applicationVariant.getName() = debug
Run with --info for a stacktrace.
--------------官方库 start--------------
com.google.android.material:material:1.8.0
androidx.appcompat:appcompat:1.5.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10
androidx.core:core-ktx:1.8.0
......

ご覧のとおり、期待される出力がすでに存在しています。
同期によって Gradle ビルドがトリガーされるため、コンパイル中に依存関係を出力するプラグインが有効になり、プロジェクト内の依存関係が出力されます。

さて、jitpack のリリース方法は以上です。とても簡単ですね~

5、Gradleプラグインポータル

Gradle プラグイン ポータルは、Gradle プラグイン専用の一元化された検索可能なリポジトリであり、リリース プロセスと構成は Maven よりもはるかに簡単です。

5.1. アカウントを登録する

まず、Gradle プラグイン ポータルhttps://plugins.gradle.org/user/loginにアカウントを登録する必要があります。Github アカウントを使用して直接ログインできます。
グラドルプロタル.png
GitHub が 2FA 二重検証を実行した後、GitHub を使用してログインするときに再度検証する必要があります。手順に従うだけで複雑ではありません。

5.2. 秘密鍵の取得

[API キー] オプションで秘密キーを生成します。
秘密鍵.png

5.3. 秘密鍵の設定

秘密キーは公開に使用され、通常はHOME_DIR/.gradle/gradle.properties (~/.gradle/gradle.properties)ファイルに保存されます。存在しない場合は、新しいキーを作成します。もちろん、他の有効な場所に配置することもできますが、グローバルに使用できるように、ここに配置することをお勧めします。
このステップを構成しない場合は、手動で release コマンドを実行し、パラメーターを渡して秘密キーを取得することもできます。

$ ./gradlew publishPlugins -Pgradle.publish.key=<key> -Pgradle.publish.secret=<secret>

5.4. リリース構成

5.4.1. 公開プラグインへの依存

Gradle プラグイン ポータルが公開されている場合、独自の公開プラグインがあります。

plugins {
    id 'com.gradle.plugin-publish' version '1.1.0'
}

公開プラグイン バージョン 1.0.0 以降を使用するには、Gradle 7.6 以降が必要です。
ただし、バージョン 1.0.0 以降では、次のような多くの便利な機能も提供されます。

  • これには「java-gradle-plugin」プラグインと「maven-publish」プラグインが含まれています。
  • ソースコードとドキュメントを自動的に生成して公開します。
  • 署名も自動的に行われます。

5.4.2. リリース情報の設定

ローカルで公開するときはプラグインに依存しているためid 'java-gradle-plugin'、ここではトラブルが省けます。引き続き gradlePlugin { } で直接構成するだけです。

gradlePlugin {
    // 项目地址
    website = 'https://github.com/yechaoa/GradleX'
    // 项目仓库URI
    vcsUrl = 'https://github.com/yechaoa/GradleX.git'

    // 可以有多个plugin配置
    plugins {
        // register 这个名字可以随便填
        register {
            // 插件id
            id = 'com.yechaoa.plugin.dependencies'
            // 插件全路径
            implementationClass = "com.yechaoa.plugin.DependenciesPlugin"
            // 插件名称
            displayName = 'DependenciesPlugin'
            // 描述、简介
            description = 'Show Dependencies Plugin'
            // 插件类别,即标签、关键词的意思
            tags.addAll('Dependencies', 'yechaoa', 'plugin')
        }
    }
}

上記の構成には Gradle バージョン 7.6 以降が必要です。古いバージョンではpluginBundle代わりにGradle が使用されますgradlePlugin
@7.6以降:

    /**
     * Returns the property holding the URL for the plugin's website.
     *
     * @since 7.6
     */
    @Incubating
    public Property<String> getWebsite() {
        return website;
    }

リリース後の例:
画像.png

5.5. リリースの実行

上記の設定が完了したら、同期を行います。
次のコマンドを発行します。

./gradlew publishPlugins

秘密鍵がない場合:

./gradlew publishPlugins -Pgradle.publish.key=<key> -Pgradle.publish.secret=<secret>

または、Gradle パネルで [publishPlugins] をダブルクリックして実行します。
ダブルクリックして実行.png
次のステップはレビューを待つことです。単純すぎて意味のないバージョンなど、審査にはいくつかの要件がありhelle wordますSNAPSHOT
承認されると、Gradle プラグイン ポータルで検索できるようになります。

5.6. 参照方法

7.0 以降:

plugins {
  id "com.yechaoa.plugin.dependencies" version "1.0.0"
}

7.0 より前:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.yechaoa.plugin:dependencies:1.0.0"
  }
}

apply plugin: "com.yechaoa.plugin.dependencies"

7.0以降はpluginManagement{ }デフォルトでアドレスが追加されるためgradlePluginPortal()、設定が簡単になりました。

7. まとめ

以上で Gradle プラグインの公開の紹介は終わりました Maven の公開方法は非常に面倒ですが初回のみです 設定が完了したらスクリプトに抽出してリリースのたびに実行することができます ただし JitPackやっぱり一番は便利ですね。

8. 最後に

書くのは簡単ではありませんが、サポートしていただきありがとうございます~

9、GitHub

https://github.com/yechaoa/GradleX

10. 関連資料

おすすめ

転載: blog.csdn.net/yechaoa/article/details/133256952