[mvn repository]Maven项目无法获取Sonatype Nexus中SNAPSHOT的包

更新时间:2020-10-18    来源:XML相关    手机版     字体:

【www.bbyears.com--XML相关】

今天在一个Maven项目中调用某个包的SNAPSHOT版本,总是提示找不到该jar包,主仓库使用了局域网中的Sonatype Nexus服务器,项目pom.xml相关配置如下:

 
  
    
       nexus
       Local Nexus Repository
       http://192.168.1.200:8080/content/groups/public/
      
         true
      

      
         true
      

    

  

 
  
    
       com.example.tools
       example-tools
       1.0.2-SNAPSHOT
    

  

 

配置文件中已经启用了snapshots,但maven在下载example-tools-1.0.2-SNAPSHOT.jar的时候总是出错,提示无法找到该包。

首先我登录Nexus服务器,在Repositories中检查Public Repositories下面Configuration已经将Releases和Snapshots(分别代表本地的正式版服务和测试版服务)放到了仓库中,如下图:


nexus-repository

突然想到Maven调用SNAPSHOT版本的时候首先获取maven-metadata.xml文件,然后根据文件中所定义的最后一个SNAPSHOT版本时间戳来决定使用服务器上的具体的哪个jar包,但是在本例中在浏览器中无法直接访问http://192.168.1.200:8080/content/groups/public/com/example/tools/example-tools/1.0.2-SNAPSHOT/maven-metadata.xml,直接显示404错误,按照Sonatype官方文档的指示依次排除各种情况,都没有发现,在最后面加上?describe参数,发现显示的错误是FILE NOT FOUND,但是服务器上这个文件是存在的。后来直接使用snapshots仓库进行访问,即直接访问
http://192.168.1.200:8080/content/repositories/snapshots/com/example/tools/example-tools/1.0.2-SNAPSHOT/maven-metadata.xml是可以直接访问的。

但是为什么在Public Repositories和Public Snapshot Repositories中为什么都不能访问呢?后来在Sonatyp Nexus的讨论组中找到了答案,原来我使用的Nexus是1.4,版本太老了,无法识别Maven 3.x之后的这个metadata格式,因此程序就不在Public Repositories中进行公开了,因此需要将Nexus进行升级了。

按照官方的升级文档,可以从1.x升级到2.7.x,如果想升级到最新的2.11的话就需要再从2.7.x进行升级,但是2.7.x目前也足够使用了,于是决定将现在用的1.4升级到2.7.2。

Nexus2.5之后的版本开始使用JDK7了,所以需要先将服务器上的JDK升级到7.0,然后从http://www.sonatype.org/nexus/archived/下载Nexus 2.7.2的zip包,下载完成之后解压,将压缩包中的nexus-2.7.2-03程序复制原来的nexus server安装根目录下,然后修改nexus-2.7.2-03/conf/nexus.properties文件,新的配置文件比原来的要简洁明了很多,根据需要调整配置文件即可。首先执行原来的nexus服务卸载,然后再执行bin/nexus install安装新的nexus服务,再启动服务就可以了,非常简单,这样原来的仓库文件可以继续使用,而且是完全兼容的,根目录下的文件结构如下:

20160119164337

这里需要说明在Windows 2003下面运行 nexus console 命令之后会出现下面的错误:

 wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2016-01-19 16:45:15 INFO  [WrapperListener_start_runner] - org.sonatype.nexus.bootstrap.jsw.JswLauncher - Starting with arguments: [./conf/jetty.xml]
jvm 1    | Unable to open process: 拒绝访问。 (0x5)
jvm 1    | 2016-01-19 16:45:15 ERROR [WrapperListener_start_runner] - org.sonatype.nexus.bootstrap.jsw.JswLauncher - Failed to start
jvm 1    | java.lang.NullPointerException: null
jvm 1    |  at org.sonatype.nexus.bootstrap.jsw.JswLauncher.doStart(JswLauncher.java:53) ~[nexus-bootstrap-2.7.2-03.jar:2.7.2-03]
jvm 1    |  at org.sonatype.nexus.bootstrap.jsw.WrapperListenerSupport.start(WrapperListenerSupport.java:37) ~[nexus-bootstrap-2.7.2-03.jar:2.7.2-03]
jvm 1    |  at org.tanukisoftware.wrapper.WrapperManager$12.run(WrapperManager.java:2788) [wrapper-3.2.3.jar:3.2.3]
wrapper  | <-- Wrapper Stopped

这应该是java wrapper的一个bug,不需要理会,只要使用nexus install安装成windows服务然后在启动服务即可。

本文来源:http://www.bbyears.com/aspjiaocheng/105372.html