You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ant/Ivy从带授权的Gitea私有M2仓库拉取包?

解决方案:Ivy/Ant 从Gitea M2仓库拉取私有包

1. 修正Credentials的Realm配置

Gitea Maven仓库的默认Realm通常是Gitea,而非你配置的Gitea package registery(注意拼写错误:应为registry)。先确认实际Realm:

curl -I https://gitea.<org>.net/api/packages/<你的用户名/组织名>/maven

查看响应头中的WWW-Authenticate字段(例如Basic realm="Gitea"),然后修改credentials配置:

<credentials host="gitea.<org>.net"
             realm="Gitea"
             username="read_only" <!-- 可填任意用户名,Gitea令牌认证只校验密码字段 -->
             passwd="<你的访问令牌>" />

2. 确保Ibiblio解析器配置正确

必须开启m2compatible="true",并指向正确的Gitea Maven仓库根URL(格式为https://gitea.<org>.net/api/packages/<所有者>/maven):

<ivysettings>
    <settings defaultResolver="gitea-resolver" />
    <resolvers>
        <ibiblio name="gitea-resolver"
                 m2compatible="true"
                 root="https://gitea.<org>.net/api/packages/<你的用户名/组织名>/maven" />
    </resolvers>
    <!-- 上面修正后的credentials配置 -->
</ivysettings>

3. 验证令牌权限

确保你的访问令牌拥有package:read权限(在Gitea的「设置-应用-访问令牌」页面检查权限列表),无此权限会返回403错误。

4. 备选:使用URL解析器替代Ibiblio

如果ibiblio解析器仍有问题,尝试用URL解析器直接指定包路径模板:

<ivysettings>
    <settings defaultResolver="gitea-url-resolver" />
    <resolvers>
        <url name="gitea-url-resolver" m2compatible="true">
            <ivy pattern="https://gitea.<org>.net/api/packages/<所有者>/maven/[organisation]/[module]/[revision]/[module]-[revision].ivy" />
            <artifact pattern="https://gitea.<org>.net/api/packages/<所有者>/maven/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]" />
            <credentials host="gitea.<org>.net" realm="Gitea" username="read_only" passwd="<你的令牌>" />
        </url>
    </resolvers>
</ivysettings>

5. 极端方案:自定义解析器添加授权头

如果Gitea要求使用Authorization: token <令牌>而非Basic Auth,可自定义Ivy解析器扩展URLHandler:

  1. 编写自定义解析器类:
import org.apache.ivy.plugins.resolver.UrlResolver;
import org.apache.ivy.util.url.BasicURLHandler;
import org.apache.ivy.util.url.URLHandler;
import java.net.HttpURLConnection;
import java.net.URL;

public class GiteaTokenResolver extends UrlResolver {
    private String authToken;

    public void setAuthToken(String authToken) {
        this.authToken = authToken;
    }

    @Override
    protected URLHandler getURLHandler(URL url) {
        return new BasicURLHandler() {
            @Override
            protected void prepareConnection(HttpURLConnection conn) throws Exception {
                super.prepareConnection(conn);
                conn.setRequestProperty("Authorization", "token " + authToken);
            }
        };
    }
}
  1. 在ivysettings.xml中配置使用:
<ivysettings>
    <settings defaultResolver="gitea-custom-resolver" />
    <resolvers>
        <custom name="gitea-custom-resolver" class="com.yourcompany.GiteaTokenResolver" m2compatible="true">
            <ivy pattern="https://gitea.<org>.net/api/packages/<所有者>/maven/[organisation]/[module]/[revision]/[module]-[revision].ivy" />
            <artifact pattern="https://gitea.<org>.net/api/packages/<所有者>/maven/[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]" />
            <property name="authToken" value="<你的访问令牌>" />
        </custom>
    </resolvers>
</ivysettings>

内容的提问来源于stack exchange,提问作者jan dorresteijn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 03:22:33