DOIFORDevOps使用gradle在gitea上发布软件包
DOIFORDevOps使用gradle在gitea上发布软件包

使用gradle在gitea上发布软件包

DevOps技术

gitea官方maven软件包发布指南

首先需要获取软件包所有者的gitea api token,获取路径:设置 – 应用 – 生成令牌

image

注意在生成令牌的时候,需要赋予packege的写权限,生成后需要自行保存token, 该token在页面仅会出现一次,后续没有地方可以查询。

然后咱们可以配置gradle了,需要引入maven-publish插件,如下:

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

publishing {
    repositories {
        maven {
            name = "Gitea"
            url = uri("https://gitea.com/api/packages/xxx/maven")

            credentials(HttpHeaderCredentials) {
                name = "Authorization"
                value = "Bearer xxxxxxx"
            }

            authentication {
                header(HttpHeaderAuthentication)
            }
        }
    }
}

这里有两个注意点:

  1. 官方文档中没有写明需要在plugins​块中引入maven-publish​插件
  2. credentials​中的value​,官方文档写的是token {token}​,实际上这么写是有问题的,需要改成Bearer {token}

官网上出了这些就没有其他的了,说是现在直接调用gradle的publishAllPublicationsToGiteaRepository​就可以发布了

image

以为这样就可以将JAR包发布到gitea上了?那我只能说你太天真了……

因为maven-publish插件默认情况下是不会主动进行打包的,所以还需要配置打包策略,也就是publications​。

配置语法大致如下,需要在publishing 块中添加publications块:

    publications {
        mavenJava(MavenPublication) {
            groupId = group
            artifactId = "$rootProject.name"
            version = version
            from components.java
        }
    }

如果还需要附带源码包,则还需要专门配置源码打包任务,如下:

task sourcesJar(type: Jar, dependsOn: classes) {
    archiveClassifier = "sources"
    from sourceSets.main.allSource
}

并在publications的mavenJava中添加任务调用:

artifact sourcesJar

如果还要自动打包javadoc的包,需要另外配置javadoc任务,如下:

task javadocJar(type: Jar, dependsOn: javadoc) {
    archiveClassifier = "javadoc"
    from javadoc.destinationDir
}

// 用于解决javadoc中文乱码的方法
javadoc {
    options {
        encoding = "UTF-8"
        charSet = "UTF-8"
        author = true
        version = true
        title = "$rootProject.name"
    }
}

相同的,需要在publications中添加任务调用:

artifact javadocJar

到此,再次执行publishAllPublicationsToGiteaRepository​任务时,就可以将任务发布到gitea上了,效果如下:

image

默认情况下,gitea的软件包是不会与仓库关联的,还需要在软件包中设置并关联仓库,这个点击进软件包名称进入详情就能找到入口(目前是在右边栏上部)。

最后,如果需要是在其他项目中引入该软禁包,只需要将仓库地址引入既可以,gradle如下:

repositories {
    // other repositories
    maven { url "https://gitea.example.com/api/packages/{owner}/maven" }
}

完整案例可以参见:https://git.greeks.studio/wuzhao/grpc-api-example

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注