You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Maven扩展部署私有仓库后仍从中央仓库下载致依赖解析失败

解决Maven扩展仅尝试从中央仓库拉取的问题

这问题我之前踩过坑!Maven扩展的仓库配置逻辑和普通项目依赖完全不一样——它加载得特别早,早到还没读取你项目里的pom.xml,所以你在pom里配置的仓库对它根本没用,只会默认去中央仓库找。给你几个靠谱的解决步骤:

  • 配置项目级Maven设置文件
    如果你的项目根目录下没有.mvn/settings.xml,直接新建一个,然后在里面添加私有仓库的插件仓库配置(因为Maven扩展属于插件范畴)。示例代码如下:

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <pluginRepositories>
        <pluginRepository>
          <id>your-private-repo</id>
          <url>http://your-private-repo-url/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </pluginRepository>
        <!-- 可保留中央仓库,但私有仓要放在前面,优先查找 -->
        <pluginRepository>
          <id>central</id>
          <url>https://repo.maven.apache.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
    </settings>
    

    这个文件会和项目一起同步,适合团队共享配置,不用每个人改全局设置。

  • 全局Maven设置配置(可选)
    如果你想让所有项目都能访问这个私有仓库,可以修改全局settings.xml:

    • 路径要么是Maven安装目录下的conf/settings.xml,要么是用户目录下的~/.m2/settings.xml
    • 同样添加上面的<pluginRepositories>节点
    • 如果私有仓库需要账号密码认证,还要在<servers>节点里补充认证信息:
      <servers>
        <server>
          <id>your-private-repo</id>
          <username>your-repo-username</username>
          <password>your-repo-password</password>
        </server>
      </servers>
      

    注意这里的<id>必须和插件仓库的<id>完全一致。

  • 检查extensions.xml的正确性
    确认.mvn/extensions.xml里的groupIdartifactIdversion和你部署到私有仓库的完全匹配,比如:

    <extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
      <extension>
        <groupId>com.blablablah</groupId>
        <artifactId>kompile-maven-extension</artifactId>
        <version>1.0</version>
      </extension>
    </extensions>
    

    哪怕一个字符错了,Maven都找不到对应的扩展。

  • 清理本地缓存并强制更新
    有时候Maven会缓存“找不到依赖”的记录,执行下面的命令强制刷新:

    mvn clean install -U
    

    -U参数会强制Maven忽略本地缓存,重新从配置的仓库拉取扩展及其依赖。

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

火山引擎 最新活动