首先需要获取软件包所有者的gitea api token,获取路径:设置 – 应用 – 生成令牌
注意在生成令牌的时候,需要赋予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)
}
}
}
}
这里有两个注意点:
- 官方文档中没有写明需要在
plugins
块中引入maven-publish
插件 - 在
credentials
中的value
,官方文档写的是token {token}
,实际上这么写是有问题的,需要改成Bearer {token}
官网上出了这些就没有其他的了,说是现在直接调用gradle的publishAllPublicationsToGiteaRepository
就可以发布了
以为这样就可以将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上了,效果如下:
默认情况下,gitea的软件包是不会与仓库关联的,还需要在软件包中设置并关联仓库,这个点击进软件包名称进入详情就能找到入口(目前是在右边栏上部)。
最后,如果需要是在其他项目中引入该软禁包,只需要将仓库地址引入既可以,gradle如下:
repositories {
// other repositories
maven { url "https://gitea.example.com/api/packages/{owner}/maven" }
}
完整案例可以参见:https://git.greeks.studio/wuzhao/grpc-api-example