Maven项目无法获取Sonatype Nexus中SNAPSHOT的包

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

 <project>
   <repositories>
     <repository>
       <id>nexus</id>
       <name>Local Nexus Repository</name>
       <url>http://192.168.1.200:8080/content/groups/public/</url>
       <releases>
         <enabled>true</enabled>
       </releases>
       <snapshots>
         <enabled>true</enabled>
       </snapshots>
     </repository>
   </repositories>
 
   <dependencies>
     <dependency>
       <groupId>com.example.tools</groupId>
       <artifactId>example-tools</artifactId>
       <version>1.0.2-SNAPSHOT</version>
     </dependency>
   </dependencies>
 </project>

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

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

突然想到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服务,再启动服务就可以了,非常简单,这样原来的仓库文件可以继续使用,而且是完全兼容的,根目录下的文件结构如下:

这里需要说明在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服务然后在启动服务即可。

时间: 2024-10-29 09:01:27

Maven项目无法获取Sonatype Nexus中SNAPSHOT的包的相关文章

Maven项目环境搭建(Maven + Spring + IBatis)步骤

准备步骤 1. 安装Maven,下载解压即可.官网下载 2. 修改maven_home/conf/settings.xml中的<localRepository>D:/MavenRepo</localRepository>指定本地仓库位置,这个位置是本地计算机上用来存放所有jar包的地方. 3. 修改settings.xml中的<mirrors></mirrors>标签,添加常用的maven远程仓库地址.这些仓库地址就是用来下载jar包的时候用的.由于中央仓库

maven项目间依赖问题

问题描述 我的一个maven项目A依赖于我的另一个maven项目B,但是mavendependencies中显示的是文件.如下图:而且项目A部署的时候,部署到tomcat容器的时候也是直接部署的B的编译后的文件夹,如何改为依赖为jar包啊.求解... 解决方案 解决方案二:项目为什么要分开!你的commons-libs本身就是项目的一部分,了不起在部署的时候使用ANT或MAVEN来分开打包部署.解决方案三:把你common-libs项目打包成jar,项目A中的dependency引用这个jar就

Maven使用笔记(五)Sonatype Nexus 搭建Maven 私服

1. 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地, 而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程. 很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用? 这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私服中拥有项目

Sonatype Nexus 搭建Maven 私服

1. 为什么使用Nexus          如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费了外网带宽,如果网速慢的话,还会影响项目的进程.很多情况下项目的开发都是在内网进行的,连接不到maven仓库怎么办呢?开发的公共构件怎么让其它项目使用?这个时候我们不得不为自己的团队搭建属于自己的maven私服,这样既节省了网络带宽也会加速项目搭建的进程,当然前提条件就是你的私

Maven Sonatype Nexus return 401

主要解决Sonatype Nexus return '401′问题及查看maven当前生效的是哪个settings.xml 使用Sonatype把自己android-common的和android-auto-scroll-view-pager等库发布到Maven中央仓库 mvn clean deploy却发现始终401,提示 Java 1 2 3 4 5 6 7 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deplo

Maven使用笔记(二)Eclipse中maven项目添加依赖

1.在Eclipse中创建Eclipse项目后如何添加jar包? 点击pom.xml文件.我们可以看到下面有7个标签. 各个标签的含义如下: Overview:显示maven项目的一些基本信息Dependencies:添加jar包的页面Plugins:添加maven插件的页面.比如tomcat-maven-plugin等Dependency Hierarchy:用于显示jar包的依赖关系.没事的时候可以看看jar包的依赖关系Effective POM:显示maven的编译路径,plugin之类的

【Maven由浅入深】4.在Eclipse中建立简单的项目1

我们上次讲到如何在Eclipse中创建Maven项目了,我们接下来来看看Maven用到了什么. 我们下面用maven开发一个简单的用户信息管理系统,我们就直接使用上一次创建的user-core来做这个系统. 我们在cn.edu.hpu.user.model包下创建一个user类 其中内容 package cn.edu.hpu.user.model; public class User { private int id; private String username; private Strin

远程部署-使用jenkins发布maven项目到远程的jetty容器中

问题描述 使用jenkins发布maven项目到远程的jetty容器中 27C 如题(就这点币了)使用jenkins发布maven项目到远程的jetty容器中 解决方案 jenkins只是打包吧! 还能远程部署到jetty里吗? 这个没试过还真不知道.

图片-从svn向eclipse中导入maven项目

问题描述 从svn向eclipse中导入maven项目 在import ->check out maven projects from scm-> 没有svn的选项 应该怎么做呢 之后??? 解决方案 eclipse 怎么从svn 导入maven项目......答案就在这里:eclipse导入svn上的maven项目 解决方案二: http://m.blog.csdn.net/blog/eastsea/39643785