辉光石安装:Maven对象未经过身份验证/无法解决依赖关系错误
我正在密切关注Glowstone https://github.com/GlowstoneMC/Glowstone自述文件中的“构建”指令,但每当我尝试使用./setup.sh时,都无法使用此堆栈跟踪进行构建:
无法执行项目目标glowstone:无法解析项目的依赖关系net.glowstone:glowstone:jar:1.10.2-SNAPSHOT:无法收集[net.glowstone:glowkit:jar:1.10.2-R0.1- SNAPSHOT(compile),com.flowpowered:flow-network:jar:1.1.0-SNAPSHOT(compile),jline:jline:jar:2.11(compile),org.projectlombok:lombok:jar:1.14.8(provided), net.sf.trove4j:trove4j:jar:3.0.3(compile),co.aikar:fastutil-lite:jar:1.0(compile),org.jetbrains.kotlin:kotlin-runtime:jar:1.1-SNAPSHOT(compile) ,org.jetbrains.kotlin:kotlin-reflect:jar:1.1-SNAPSHOT(compile),io.netty:netty-transport-native-epoll:jar:4.1.0.CR7(compile),junit:junit:jar:4.12 (测试)]:无法读取net.glowstone的工件描述符:glowkit:jar:1.10.2-R0.1-SNAPSHOT:无法传输工件net.glowstone:glowkit:pom:1.10.2-R0.1-SNAPSHOT从/到辉光石快照( https://repo.glowstone.net/content/repositories/snapshots/ ):对方未验证 – > [帮助1]
我试着在Maven网站上查看一些关于DependencyResolutionException和peer not authenticated错误的提示,但是没有帮助。 任何人都请帮助我,我已经被困了几个星期,没有任何进展。
我尝试了相同的指示,并能够准确地重现您的错误。
问题似乎是maven不能够安全地与pom中指定的存储库进行通信; 看到这个答案 。
经过一番捣鼓之后,我能够获得build.sh
脚本(只是运行mvn package
)成功运行。 主要思想是将pom中的依赖版本锁定到非SNAPSHOT版本,以便不需要从这些有问题的存储库中检索它们。
这些步骤应该让你到一个工作版本:
- 在pom中,将
kotlin-runtime
和kotlin-reflect
依赖版本从1.1-SNAPSHOT
更改为1.0.4
。 - 将
flow-network
依赖关系版本从1.1.0-SNAPSHOT
更改为1.0.0
。 - 下载
glowkit-1.10.2-R0.1-20160907.003121-11.jar
和glowkit-1.10.2-R0.1-20160907.003121-11.pom
并把它们放在当地回购的正确位置(对我来说,那是~/.m2/repository/net/glowstone/glowkit/1.10.2-R0.1-SNAPSHOT/
) - 现在,您可以将pom中的
bukkit.version
属性值从1.10.2-R0.1-SNAPSHOT
更改为1.10.2-R0.1-20160907.003121-11
- 同样,从
http://ci.emc.gs/nexus/content/repositories/aikar/co/aikar/fastutil-lite/1.0/
下载fastutil-lite-1.0.jar
和fastutil-lite-1.0.pom
,然后放置他们在你本地的mvn回购(~/.m2/repository/co/aikar/fastutil-lite/1.0/
)
注意这么做应该已经解决了下载依赖关系的所有问题,所以至少应该像mvn dependency:tree
一样成功运行。
-
最后,即使在解决这些依赖性问题之后,由于使用了netty的版本,也存在编译问题。 将
4.1.5.Final
netty-transport-native-epoll
的依赖版本从4.1.0.CR7
为4.1.5.Final
。 此外,你将不得不在netty-all
上添加这个显式的依赖关系,因为否则的话,flow-network
将引入一个早期的版本:<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.5.Final</version> </dependency>
这应该做到这一点! 完成这些步骤之后, mvn package
以及setup.sh
脚本就成功运行了。
此错误是由连接到repo.glowstone.net的SSL堆栈中的不兼容性引起的。
降级依赖关系以避免连接到Glowstone存储库可能会避免这个特殊问题,但会产生其他问题,而且由于它需要快照依赖关系(请参阅GitHub GlowstoneMC问题跟踪器上的GH-467),而且还不适用于最新的Glowstone构建讨论与辉石开发人员,我自己的测试,现在降级导致一个不同的错误: java.lang.IllegalAccessError: class lombok.javac.apt.Processor (in unnamed module @0x18c23b6)
)
Maven的错误消息peer not authenticated
并没有明确地这么说,但是这是由于repo.glowstone.net需要服务器名称指示(SNI)扩展(Cloudflare Flexible SSL需要)而引起的,旧版本的Maven不支持。 您可以通过在此服务器上执行SSLLabs扫描来进行验证,该服务器报告“此站点仅在具有SNI支持的浏览器中工作”,并捕获Wireshark中的SSL握手,该握手显示服务器在第一个客户端Hello后没有server_name
:
Wireshark捕获显示缺少扩展名:server_name
Wireshark捕获演示服务器关闭连接
修复很简单:升级到支持SNI的Maven版本。 在我的情况下,我有Maven 3.0.5,但从maven.apache.org更新到Maven 3.5.0修复了这个问题,我能够顺利构建Glowstone。
你可以用mvn -version
检查你的Maven版本,它应该显示这样的内容(Glowstone的关键版本是Apache Maven 3.5.0+和Java版本:1.8.0_131):
Glowstone $ mvn -version Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T12:39:06-07:00) Maven home: /Users/admin/.m2 Java version: 1.8.0_131, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8