Glowstone安装:Maven peer未经过身份验证/无法解决依赖项错误

时间:2016-10-14 17:22:26

标签: maven minecraft

我正密切关注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(编译),com.flowpowered:flow-network:jar:1.1.0-SNAPSHOT(compile),jline:jline:jar:2.11(compile),org.projectlombok:lombok:jar:1.14.8(提供),net.sf.trove4j:trove4j:jar:3.0.3(编译),co.aikar:fastutil-lite:jar:1.0(编译),org.jetbrains.kotlin:kotlin-runtime:jar:1.1-SNAPSHOT (编译),org.jetbrains.kotlin:kotlin-reflect:jar:1.1-SNAPSHOT(编译),io.netty:netty-transport-native-epoll:jar:4.1.0.CR7(编译),junit:junit: jar:4.12(test)]:无法读取net.glowstone的工件描述符:glowkit:jar:1.10.2-R0.1-SNAPSHOT:无法传输工件net.glowstone:glowkit:pom:1.10.2-R0。 1-SNAPSHOT from / to glowstone-snapshots(https://repo.glowstone.net/content/repositories/snapshots/):peer not authenticated - > [帮助1]

我试着在maven网站上查看DependencyResolutionException和peer not authenticated错误的一些提示,但它没有帮助。任何人都请帮助我,我已经被困了几个星期而没有任何进展。

2 个答案:

答案 0 :(得分:0)

我尝试了相同的说明,并且能够准确地重现您的错误。

问题似乎是maven无法与pom中指定的存储库安全地通信;见this answer

经过一番摆弄,我得到了build.sh脚本(刚刚运行mvn package)才能成功运行。主要思想是将pom中的依赖版本锁定到非SNAPSHOT版本,这样就不需要从那些有问题的存储库中检索它们。

这些步骤可以让您进入有效的构建:

  1. 在pom中,更改kotlin-runtimekotlin-reflect依赖关系版本1.1-SNAPSHOT1.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. 同样,从fastutil-lite-1.0.jar下载fastutil-lite-1.0.pomhttp://ci.emc.gs/nexus/content/repositories/aikar/co/aikar/fastutil-lite/1.0/,并将其放入您当地的mvn回购(~/.m2/repository/co/aikar/fastutil-lite/1.0/
  6. 请注意,执行此操作应该已经解决了下载依赖项的所有问题,因此至少应该成功运行mvn dependency:tree之类的内容。

    1. 最后,即使在解决了这些依赖性问题之后,由于使用了netty版本,因此存在编译问题。将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>
      
    2. 应该这样做!完成这些步骤后,mvn package以及setup.sh脚本为我成功运行。

答案 1 :(得分:0)

此错误是由连接到repo.glowstone.net的SSL堆栈中的不兼容性引起的。

降低依赖关系以避免连接到Glowstone存储库可能会避免此特定问题,但会产生其他问题,并且目前无法使用最新的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之后断开连接,而不是{ {1}}:

Wireshark capture demonstrating missing Extension: server_name

Wireshark capture demonstrating server closing connection

修复很简单:升级到支持SNI的Maven版本。在我的情况下,我有Maven 3.0.5,但从maven.apache.org更新到Maven 3.5.0修复了问题,我能够毫不费力地构建Glowstone。

您可以使用server_name检查您拥有的Maven版本,它应该显示类似的内容(Glowstone的关键版本是Apache Maven 3.5.0+和Java版本:1.8.0_131):

mvn -version