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 URL | Accessible | Error Message (if any) |
---|---|---|
https://sachaproject.gforge.inria.fr/repositories/releases/ | Fail | Merci 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/ | Fail | 404 File not found |
https://oss.sonatype.org/content/repositories/snapshots/ | Fail | Directory listing forbidden |
不可访问,但是不意味着repository下面的包不可用!(今天才知道)
亦可见issue页:https://github.com/SpoonLabs/nopol/issues/225