经验丰富的开发人员会不时地创建一段代码,并希望在不同的项目中重用它。当这种情况出现时,知道如何发布一个库是很有用的,这样就可以很容易地将它合并到一个不同的项目中。在这篇文章中,我将描述如何使用maven-publish和com.jfrog将Kotlin库发布到JCenter的bintray Gradle插件中。
Gradle Maven插件
第一步是应用Maven插件。该插件增加了对将工件部署到Maven存储库的支持。请注意,在多项目构建的情况下,例如ShouldKO,应将Maven插件应用于定义了要发布的工件的每个项目。您可以用allprojects
来消除重复,例如:
allprojects {
repositories {
jcenter()
}
apply plugin: 'kotlin'
apply plugin: 'maven'
group "pl.miensol.shouldko"
}
对于com.jfrog.bintray
稍后使用的插件,为了与Maven工件很好地配合使用,我们需要应用其他Gradle插件。这是maven-publish
插件,它提供了以Maven格式发布工件的功能。我们需要做的就是在apply plugin: 'maven-publish'的
主项目中。
定义Maven发布
该com.jfrog.bintray
插件依赖正确定义的Maven出版物。Gradle DSL允许我们根据项目属性轻松定义它们,例如
publishing {
publications {
hamcrest(MavenPublication) {
def project = project(':hamcrest')
from project.components.java
artifact project.sourcesJar { // not required, includes sourcesJar with correct classifer
classifier "sources"
}
groupId group
artifactId project.name
version project.version
}
core(MavenPublication) {
def project = project(':core')
from project.components.java
artifact project.sourcesJar {
classifier "sources"
}
groupId group
artifactId project.name
version project.version
}
}
}
上面的Maven出版物包括源工件。发布附加的工件分类器非常重要,因为它允许IDE显示文档弹出窗口或通过库源代码进行调试。但是,需要首先定义它,因为在向Gradle项目应用java
或kotlin
插件时默认不包括它。这很容易做到,如下所示:
allprojects {
task sourcesJar(type: Jar, dependsOn: classes) {
from sourceSets.main.allSource
}
}
项目版本控制
如您在上面看到的,我们通常将project.version
指示为MavenPublication
。版本软件有多种策略,但是当涉及到库时,语义版本控制方案已被广泛接受为标准。如果您想使用它,那么Gradle可以使用一些插件来简化维护预发行版本和补丁版本的日常任务。我喜欢其中的插件集,该插件集ajoberstar
提供了一种基于git标签对项目进行版本控制的方法。应用它们很容易:
plugins {
id "org.ajoberstar.grgit" version "1.7.2"
id "org.ajoberstar.release-opinion" version "1.7.2"
}
:现在,当你发布例如gradle build时,插件会根据你的git仓库状态来推断下一个版本:
> Configure project :
Inferred project: shouldko, version: 0.1.5-dev.0.uncommitted+4f71d34
Bintray上传
最后,当我们准备上载我们的库并将其提供给所有人使用时,我们需要设置一个Bintray帐户。一旦我们有了它,在配置页面我们可以访问所需的API关键配置Bintray Gradle插件。
bintray {
user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')
key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')
publications = ['core', 'hamcrest']
pkg {
repo = 'maven'
name = 'shouldko'
desc = 'Adds source line to tests assertion messages'
userOrg = 'brightinventions'
licenses = ['MIT']
vcsUrl = 'https://github.com/bright/shouldko.git'
labels = ['tests', 'hamcrest', 'junit']
}
}
Bintray API密钥应保持私有状态,并且绝不包含在源代码存储库中。
我们可以通过查看项目属性来配置用户和密钥,如果不能使用环境变量也可以这样做。这样就没有必要公开揭露了。
gradle build bintrayUpload -PbintrayUser= -PbintrayApiKey=
该repo
是Bintray库的名称。您可以使用相同的Bintray存储库来托管多个项目。
Bintray插件非常沉默寡言,因此我想添加一些日志消息来查看bintrayUpload的
完成时间:
afterEvaluate {
tasks.bintrayUpload.doLast {
logger.lifecycle("Uploaded artifacts to bintray at version $version")
}
}
Travis建立
每个项目都应至少具有某种形式的持续集成。对于开源软件,至少有几个免费的构建服务器可用。Travis可能是最受欢迎的一款。对于gradle项目,Travis将默认调用build
。如果您希望在成功完成构建时将构建工件上载到Bintray,则需要script
在.travis.yml
诸如此类的部分添加一行:
script:
- ./gradlew build
- ./gradlew bintrayUpload
显然,还需要配置Bintray凭据,这可以通过项目配置页面完成:
TravisCI环境配置
现在,Gradle git插件将创建一个开发版本,并在每次Travis构建时将其发布到Bintray。
标记释放
每当您要发布该库的新版本时,现在只需标记特定版本即可,例如
git tag 0.1.4
git push origin 0.1.4
本地或continueos集成构建完成后,您应该在Bintray Web应用程序中看到一个新版本。从那里您需要发布版本。
使用新图书馆
发布版本后,您可以轻松地在Maven或Gradle项目中使用它。在将软件包链接到JCenter之前,您需要将新的Maven存储库位置通知构建系统,例如:
repositories {
jcenter()
maven { url 'https://dl.bintray.com/brightinventions/maven' }
}
请注意,brightinvention是组织用户名,maven是上面提到的存储库名称。现在,终于可以消耗你的图书馆:
compile 'pl.miensol.shouldko:hamcrest:0.1.4'
原文链接:https://dev.to//brightdevs/how-to-publish-a-library-to-a-maven-repository-with-the-maven-publish-plugin-4gpf