自动修复工具Nopol编译打包遇到的错误:无法下载依赖(含:maven仓库机制解析)

1. 前言

创作开始时间:2022年3月27日20:08:52

很久没编译Nopol了,之前本地的maven repo也丢失了,今天重新编译的时候,发现Nopol编译没通过,,,无语了。这里给出解决方案。

2. 错误描述

运行mvn clean package
发现卡在downloading xxx了,
然后就是:

(connection time out)

错误。

3. 探索过程

一开始有点懵逼。因为过久了,一下子接触又有点陌生了。

先瞅了一眼:nopol/nopol/pom.xml文件,
发现里面有几个额外的repository:

 <repositories>
        <repository>
            <id>inria</id>
            <url>http://maven-repo.gforge.inria.fr/releases</url>
        </repository>
        <repository>
            <id>sachaproject.gforge.inria.fr-release</id>
            <name>Maven Repository for Spoon Release</name>
            <url>http://sachaproject.gforge.inria.fr/repositories/releases/</url>
            <snapshots/>
        </repository>
        <repository>
            <id>gforge.inria.fr-snapshot</id>
            <name>Maven Repository for Spoon Snapshot</name>
            <url>http://maven.inria.fr/artifactory/spoon-public-snapshot/</url>
            <snapshots/>
        </repository>
        <repository>
            <id>spoon.gforge.inria.fr-release</id>
            <name>Maven Repository for Spoon Release</name>
            <url>http://spoon.gforge.inria.fr/repositories/releases/</url>
            <snapshots/>
        </repository>
        <repository>
            <id>tdurieux.github.io/maven-repository/snapshots/</id>
            <name>tdurieux.github.io maven-repository</name>
            <url>https://tdurieux.github.io/maven-repository/snapshots/</url>
        </repository>
    </repositories>


    <distributionManagement>
        <repository>
            <id>internal-repo</id>
            <name>Temporary Staging Repository</name>
            <url>file://${project.build.directory}/mvn-repo/releases</url>
        </repository>
        <snapshotRepository>
            <id>internal-snapshot-repo</id>
            <name>Temporary Staging Snapshot Repository</name>
            <url>file://${project.build.directory}/mvn-repo/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

我感觉估计是这些网站已经不可用了,,,所以download不下来。
手动试了几个:

  • http://maven-repo.gforge.inria.fr/releases 访问不了
  • http://sachaproject.gforge.inria.fr/repositories/releases/ 访问不了
  • http://maven.inria.fr/artifactory/spoon-public-snapshot/ 可以访问
  • http://spoon.gforge.inria.fr/repositories/releases/ 访问不了

四去其三,难顶。

3.1. 解决方案

两手抓。
1)先提了个issue,问下是啥情况。

不禁感慨,时间是最大的“敌人”。去年网站还维护的好好的,今年数据就get不到了。

2)把上面的repository注释了,重新编译一遍,看缺了哪些包:

[ERROR] Failed to execute goal on project nopol: Could not resolve dependencies for project fr.inria.gforge.spirals:nopol:jar:0.2-SNAPSHOT: The following artifacts could not be resolved: gov.nasa.jpf:jpf:jar:1154, gov.nasa.jpf:jpf-symbc:jar:576, com.microsoft.z3:z3:jar:0.0.1, org.smtlib:smtlib:jar:0.9.7.1, sacha:infra:jar:0.1, com.gzoltar:gzoltar:jar:0.1.1: Failure to find gov.nasa.jpf:jpf:jar:1154 in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of alimaven has elapsed or updates are forced -> [Help 1]

缺了:

  • gov.nasa.jpf:jpf:jar:1154

但是我发现我本地有这个jar包啊。而且是完整的,可以打开的jar包。(说明下载完全,不存在破损情况)

2022年3月27日21:05:53
经过一番研究,我发现问题出在:

Failure to find gov.nasa.jpf:jpf:jar:1154 in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of alimaven has elapsed or updates are forced -> [Help 1]

参考:

  • ARTIFACTORY: How to Resolve the Common Maven Error: resolution will not be reattempted https://jfrog.com/knowledge-base/how-to-resolve-the-common-resolution-will-not-be-reattempted-maven-error/ (这里面说要用-U参数运行mvn)
  • 解决maven构建报错 https://blog.51cto.com/qiangsh/1743074 这里面说:

Maven默认会使用本地缓存的库来编译工程,对于上次下载失败的库,maven会在​​~/.m2/repository​​​目录下创建xxx.lastUpdated文件,一旦这个文件存在,那么在直到下一次nexus更新之前都不会更新这个依赖库。
​方法一:​
​删除v~/.m2/repository目录下的*.lastUpdated文件,然后再次运行mvn compile编译工程。

终于get到了。

这样操作,以smtlib为例:
打开:/home/apr/.m2/repository/org/smtlib/smtlib/0.9.7.1/smtlib-0.9.7.1.jar所在文件夹,然后删掉所有*lastupdated文件。
(2022年3月27日21:12:44 发现不行,还需要删除别的文件,只留下下面这两个文件,才可以:)

在这里插入图片描述

然后在nopol文件夹下运行:mvn clean package -DskipTests -U,发现smtlib没再报错了。

依次对其他报错的依赖这样操作即可。

备注:最后发现好像可以直接mvn clean package -DskipTests (不加-U也可以),就能正常打包了。终于搞定了,哭。

在这里插入图片描述

4. 小结

感觉解决这种问题,这的很需要想象力啊。
有时候真的一脸懵逼。

但是这就是神奇的地方,一个小时前我一脸懵逼,但是一小时还是通过一些操作达到workaround的效果了。。。

创作结束时间:2022年3月27日21:17:14

4.1. 更新 2022年3月31日15:27:14

今天研究了40min,终于搞清了错误的来源。其实不是nopol的锅,那个remote repository本来就不可访问的(可能是private),但是那个网站下的pom和jar是可以访问的。这个很有意思。

我也是今天才知道。

Repository URLAccessibleError Message (if any)
https://sachaproject.gforge.inria.fr/repositories/releases/FailMerci de contacter le support. Please contact the IT team.
https://repository.ow2.org/nexus/content/repositories/snapshots/Succeed-
https://tdurieux.github.io/maven-repository/snapshots/Fail404 File not found
https://oss.sonatype.org/content/repositories/snapshots/FailDirectory listing forbidden

不可访问,但是不意味着repository下面的包不可用!(今天才知道)

亦可见issue页:https://github.com/SpoonLabs/nopol/issues/225

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值