辉光石安装: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版本,以便不需要从这些有问题的存储库中检索它们。

这些步骤应该让你到一个工作版本:

  1. 在pom中,将kotlin-runtimekotlin-reflect依赖版本从1.1-SNAPSHOT更改为1.0.4
  2. flow-network依赖关系版本从1.1.0-SNAPSHOT更改为1.0.0
  3. 下载glowkit-1.10.2-R0.1-20160907.003121-11.jarglowkit-1.10.2-R0.1-20160907.003121-11.pom并把它们放在当地回购的正确位置(对我来说,那是~/.m2/repository/net/glowstone/glowkit/1.10.2-R0.1-SNAPSHOT/
  4. 现在,您可以将pom中的bukkit.version属性值从1.10.2-R0.1-SNAPSHOT更改为1.10.2-R0.1-20160907.003121-11
  5. 同样,从http://ci.emc.gs/nexus/content/repositories/aikar/co/aikar/fastutil-lite/1.0/下载fastutil-lite-1.0.jarfastutil-lite-1.0.pom ,然后放置他们在你本地的mvn回购( ~/.m2/repository/co/aikar/fastutil-lite/1.0/

注意这么做应该已经解决了下载依赖关系的所有问题,所以至少应该像mvn dependency:tree一样成功运行。

  1. 最后,即使在解决这些依赖性问题之后,由于使用了netty的版本,也存在编译问题。 将4.1.5.Final netty-transport-native-epoll的依赖版本从4.1.0.CR74.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