Gradle插件之maven

您所在的位置:网站首页 pulish用法 Gradle插件之maven

Gradle插件之maven

2024-01-17 18:54| 来源: 网络整理| 查看: 265

maven插件已经过时,官方推荐使用这个插件来实现将我们的代码发布到 Apache Maven仓库的功能。

依赖 plugins { id 'maven-publish' } 基础概念 任务 Tasks

所有以下任务都归在名为publishing类型为PublishingExtension的扩展下。

generatePomFileForPubNamePublication:为名为PubName的发布创建一个POM文件,填充已知元数据,如项目名称、项目版本和依赖项。生成的POM文件默认放在 *build/publications/$pubName/pom-default.xml*. **publishPubNamePublicationToRepoNameRepository **:将名为PubName的发布发布到名为RepoName的存储库中。如果您有一个没有显式名称的存储库定义,那么RepoName将是Maven。 **publishPubNamePublicationToMavenLocal **:将PubName发布复制到本地Maven缓存—通常是*$USER_HOME/.m2/repository*——连同发布的POM文件和其他元数据一起。 publish:依赖于所有publishPubNamePublicationToRepoNameRepository任务。将所有已定义的发布发布到所有已定义存储库的聚合任务。它不包括将发布复制到本地Maven缓存。 publishToMavenLocal:依赖于所有publishPubNamePublicationToMavenLocal任务。将所有已定义的发布复制到本地Maven缓存,包括它们的元数据(POM文件等)。 发布 Publications

Maven 发布中的配置主要有四种:

一个component - 通过 MavenPublication.from(org.gradle.api.component.SoftwareComponent)配置 Custom artifacts — 通过 MavenPublication.artifact(java.lang.Object) 方法配置。查看MavenArtifact 获取所有可配置选项。 标准元数据,例如artifactId, groupId and version. POM文件的其他内容 — 通过 MavenPublication.pom(org.gradle.api.Action)配置 仓库 Repositories publishing { repositories { maven { // 基于版本名称选择不同的仓库地址 def releasesRepoUrl = "$buildDir/repos/releases" def snapshotsRepoUrl = "$buildDir/repos/snapshots" // url是必须要配置的 url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl // 仓库用户名密码 credentials { username = "root" password = "root" } } } } 完整例子 apply plugin: 'maven-publish' task generateSourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier 'sources' } def versionName = "2.7.0-SNAPSHOT" publishing { publications { Production(MavenPublication) { // 使用方引用 implementation 'cn.com.jack:mavendemo:2.7.0-SNAPSHOT' groupId = "cn.com.jack" artifactId = "mavendemo" version = versionName // 依赖 bundleReleaseAar 任务,并上传其产出的aar afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) } // 也可以指定上传的AAR包,但是需要先手动生成aar // artifact("$buildDir/outputs/aar/${project.getName()}-debug.aar") // 上传source,这样使用放可以看到方法注释 artifact generateSourcesJar // pom文件中声明依赖,从而传递到使用方 pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') configurations.implementation.allDependencies.each { // 避免出现空节点或 artifactId=unspecified 的节点 if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) { println it.toString() def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) dependencyNode.appendNode('scope', 'implementation') } } } } } repositories { // 定义一个 maven 仓库 maven { // 可以有且仅有一个仓库不指定 name 属性,会隐式设置为 Maven // 根据 versionName 来判断仓库地址 url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL // 仓库用户名密码 credentials { username = "shine" password = "shine" } } // 定义第二个 maven 仓库,名为 Nexus maven { // 必须显示指定 name name = "nexus" url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL } } }

在Gradle Tool Window中会生成对应的任务,如下图所示:

你可以在Gradle Tool Window中执行发布任务,也可以使用命令的方式 ./gradlew clean build publish

需要注意的是使用maven插件时,生成的.pom文件中包括所有的依赖,从而保证使用方能够获取所有依赖。但是maven-publish插件生成的.pom文件并不包含依赖,所以我们通过pom.withXml增加了依赖。

Android Gradle 插件 3.6.0使用更简便方式

Android Gradle 插件 3.6.0 及更高版本(说的是这里 classpath 'com.android.tools.build:gradle:3.6.0')支持 Maven Publish Gradle 插件,可让您将构建工件发布到 Apache Maven 代码库。Android Gradle 插件会为应用或库模块中的每个构建变体工件创建一个组件,您可以使用它来自定义要发布到 Maven 代码库的发布内容。

Android 插件所创建的组件取决于模块是否使用应用或库插件,如下表所述。

Android Gradle 插件发布内容工件组件名称com.android.libraryAARcomponents.variantcom.android.applicationAPK 和可用的 ProGuard 或 R8 映射文件的 ZIPcomponents.variant_apkcom.android.applicationAndroid App Bundle (AAB)components.variant_aab

所以我们上面的例子就成了下面这样

apply plugin: 'maven-publish' task generateSourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier 'sources' } def versionName = "2.7.0-SNAPSHOT" afterEvaluate { publishing { publications { Production(MavenPublication) { from components.release // 使用方引用 implementation 'cn.com.jack:mavendemo:2.7.0-SNAPSHOT' groupId = "cn.com.jack" artifactId = "mavendemo" version = versionName // 上传source,这样使用放可以看到方法注释 artifact generateSourcesJar } } repositories { // 定义一个 maven 仓库 maven { // 可以有且仅有一个仓库不指定 name 属性,会隐式设置为 Maven // 根据 versionName 来判断仓库地址 url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL // 仓库用户名密码 credentials { username = "shine" password = "shine" } } // 定义第二个 maven 仓库,名为 Nexus maven { // 必须显示指定 name name = "nexus" url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL } } } } 参考

官方文档 Maven Publish Plugin

使用 Maven Publish 插件

Publish an Android library to Maven with aar and source jar



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3