`
juvenshun
  • 浏览: 1594305 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Nexus入门指南(图文)

阅读更多

Nexus介绍

Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。

 

下载和安装

你可以从http://nexus.sonatype.org/downloads/ 下载最新版本的Nexus,笔者使用的是1.3.0版本。

Nexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。

 

Bundle方式安装

解压nexus-webapp-1.3.0-bundle.zip 至任意目录,如D:\dev_tools ,然后打开CMD,cd至目录D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32 ,运行Nexus.bat 。你会看到Nexus的启动日志,当你看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明Nexus启动成功了,然后打开浏览器,访问http://127.0.0.1:8081/nexus,你会看到如下的页面:

要停止Nexus,Ctrl+C即可,此外InstallNexus.bat可以用来将Nexus安装成一个windows服务,其余的脚本则对应了启动,停止,暂停,恢复,卸载Nexus服务。

 

WAR方式安装

你需要有一个能运行的web容器,这里以Tomcat为例,加入Tomcat的安装目录位于D:\dev_tools\apache-tomcat-6.0.18 ,首先我们将下载的nexus-webapp-1.3.0.war 重命名为nexus.war ,然后复制到D:\dev_tools\apache-tomcat-6.0.18\webapps\nexus.war ,然后启动CMD,cd到D:\dev_tools\apache-tomcat-6.0.18\bin\ 目录,运行startup.bat 。一切OK,现在可以打开浏览器访问http://127.0.0.1:8080/nexus,你会得到和上图一样的界面。

 

代理外部Maven仓库

登陆

要管理Nexus,你首先需要以管理员身份登陆,点击界面右上角的login,输入默认的登录名和密码:admin/admin123,登陆成功后,你会看到左边的导航栏增加了很多内容:

这里,可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。你会看到Nexus的功能十分丰富和强大,本文,笔者只介绍一些最基本的管理和操作。

 

代理Maven中央仓库

点击左边导航栏的Repositories,界面的主面板会显示所有一个所有仓库及仓库组的列表,你会看到它们的Type字段的值有group,hosted,proxy,virtual。这里我们不关心virtual,只介绍下另外三种类型:

  • hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。
  • proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
  • group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置maven依赖仓库组。

由此我们知道,我们需要配置一个Maven中央仓库的proxy,其实Nexus已经内置了Maven Central,但我们需要做一些配置。点击仓库列表中的Maven Central,你会注意到它的Policy是release,这说明它不会代理远程仓库的snapshot构件,这是有原因的,远程仓库的snapshot版本构件不稳定且不受你控制,使用这样的构件含有潜在的风险。然后我们发现主面板下方有三个Tab,分别为Browse,Configuration和Mirrors,我们点击Configuration进行配置,你现在需要关心的是两个配置项:“Remote Storage Location”为远程仓库的地址,对于Maven Central来说是http://repo1.maven.org/maven2/;“Download Remote Indexes”顾名思义是指是否下载远程索引文件,Maven Central的该字段默认为False,这是为了防止大量Nexus无意识的去消耗中央仓库的带宽(中央仓库有大量的构件,其索引文件也很大)。这里我们需要将其设置为True,然后点击Save。在Nexus下载的中央仓库索引文件之后,我们就可以在本地搜索中央仓库的所有构件。下图展示了我们刚才所涉及的配置:

 

添加一个代理仓库

这里我们再举一个例子,我们想要代理Sonatype的公共仓库,其地址为:http://repository.sonatype.org/content/groups/public/。步骤如下,在Repositories面板的上方,点击Add,然后选择Proxy Repository,在下方的配置部分,我们填写如下的信息:Repository ID - sonatype;Repository Name - Sonatype Repository;Remote Storage Location - http://repository.sonatype.org/content/groups/public/。其余的保持默认值,需要注意的是Repository Policy,我们不想代理snapshot构件,原因前面已经描述。然后点击Save。配置页面如下:

 

管理本地Maven仓库

Nexus预定义了3个本地仓库,分别为Releases,Snapshots,和3rd Party。这三个仓库都有各自明确的目的。Releases用于部署我们自己的release构件,Snapshots用于部署我们自己的snapshot构件,而3rd Party用于部署第三方构件,有些构件如Oracle的JDBC驱动,我们不能从公共仓库下载到,我们就需要将其部署到自己的仓库中。

当然你也可以创建自己的本地仓库,步骤和创建代理仓库类似,点击Repository面板上方的Add按钮,然后选择Hosted Repository,然后在下方的配置面板中输入id和name,注意这里我们不再需要填写远程仓库地址,Repository Type则为不可修改的hosted,而关于Repository Policy,你可以根据自己的需要选择Release或者Snapshot,如图:

 

管理Maven仓库组

Nexus中仓库组的概念是Maven没有的,在Maven看来,不管你是hosted也好,proxy也好,或者group也好,对我都是一样的,我只管根据groupId,artifactId,version等信息向你要构件。为了方便Maven的配置,Nexus能够将多个仓库,hosted或者proxy合并成一个group,这样,Maven只需要依赖于一个group,便能使用所有该group包含的仓库的内容。

Nexus预定义了“Public Repositories”和“Public Snapshot Repositories”两个仓库组,前者默认合并所有预定义的Release仓库,后者默认合并所有预定义的Snapshot仓库。我们在本文前面的部分创建了一个名为“Sonatype Repository”的仓库,现在将其合并到“Public Repositories”中。

点击仓库列表中的“Public Repositories”,然后选择下方的"Configuration" Tab,在配置面板中,将右边“Avaiable Repositories”中的“Sonatype Repository”拖拽到左边的“Ordered Group Repository”中,如图:

创建仓库组和创建proxy及hosted仓库类似,这里不再赘述。需要注意的是format字段需要填写“maven2”,添加你感兴趣的仓库即可。

 

搜索构件

在浩大的Maven仓库中一下下点击链接,浏览路径以寻找感兴趣的构件是一件很郁闷的事情。Nexus基于nexus-indexer提供构件搜索功能,要想对仓库进行搜索,无论是hosted,proxy,或者group,你都必须确认索引文件存在。这一点对于代理仓库尤其重要,有些远程仓库可能根本就没有索引,所以你无法搜索这些代理仓库。有些远程仓库的远程索引非常大,如中央仓库达到了70M左右,那么第一次下载索引需要花很多时间,所以要期望得到搜索结果,确保看到如下的文件:

一旦你的Nexus拥有了本地或者远程仓库的索引文件,你就可以享受Nexus的构件搜索功能了。不论登陆与否,你都可以使用关键字进行模糊搜索,比如我在左边导航栏上部的搜索框内输入junit,然后点击搜索按钮,右边立刻会分页显示500多条的junit相关构件信息。如果你了解更多的信息,你也可以通过限定groupId,artifactId,version进行搜索,点击导航栏中的“Advanced Search”,点击右边所有页面左上角的下拉框,选择“GAV Search”。笔者这里输入junit:junit:4.4,然后回车:

选择一项搜索结果,在页面下方会显示“Artifact Information”的面板,你可以点击"artifact"或者"pom"下载对应文件,而该面板右边更显示了一个Maven依赖配置,你可以直接复制该配置到Maven POM中,这是个十分方便的特性。

此外,值得一提的是,Nexus还支持基于classname的搜索,你只需点击搜索页面右上角的下拉框,选择“Classname Search”,然后输入类名即可,这里我不再赘述。

 

配置Maven使用Nexus

默认情况下,Maven依赖于中央仓库,这是为了能让Maven开箱即用,但仅仅这么做明显是错误的,这会造成大量的时间及带宽的浪费。既然文章的前面已经介绍了如何安装和配置Nexus,现在我们就要配置Maven来使用本地的Nexus,以节省时间和带宽资源。

我们可以将Repository配置到POM中,但一般来说这不是很好的做法,原因很简单,你需要为所有的Maven项目重复该配置。因此,这里我将Repository的配置放到$user_home/.m2/settings.xml中:

<settings>
...
<profiles>
  <profile>
    <id>dev</id>
    <repositories>
      <repository>
        <id>local-nexus</id>
        <url>http://127.0.0.1:8080/nexus/content/groups/public/</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </repository>
    </repositories>
  </profile>
</profiles>
<activeProfiles>
  <activeProfile>dev</activeProfile>
</activeProfiles>
...
</settings>

由于我们不能直接在settings.xml中插入<repositories>元素,这里我们编写了一个profile,并添加了一个profile并使用<activeProfile>元素自动将这个profile激活。这里的local-nexus仓库指向了刚才我们配置的Nexus中“Public Repositories”仓库组,也就是说,所有该仓库组包含的仓库都能供我们使用。此外,我们通过<releases>和<snapshots>元素激活了Maven对于仓库所有类型构件下载的支持,当然你也可以调节该配置,比如说禁止Maven从Nexus下载snapshot构件。

使用该配置,Maven就会从你的Nexus服务器下载构件了,速度和从Central下载可不是一个数量级的。

 

部署构件至Nexus

Nexus提供了两种方式来部署构件,你可以从UI直接上传,也可以配置Maven部署构件。

 

通过Nexus UI部署

有时候有个jar文件你无法从公共Maven仓库找到,但是你能从其它得到这个jar文件(甚至是POM),那么你完全可以将这个文件部署到Nexus中,使其成为标准流程的一部分。步骤如下:

点击左边导航栏的"Repository",在右边的仓库列表中选择一个仓库,如“3rd Party”,然后会看到页面下方有四个tab,选择最后一个“Upload”,你会看到构件上传界面。选择你要上传的构件,并指定POM,(或者手工编写GAV等信息),最后点击Upload,该构件就直接被部署到了Nexus的"3rd Party"仓库中。如图:


通过Maven部署

更常见的用例是:团队在开发一个项目的各个模块,为了让自己开发的模块能够快速让其他人使用,你会想要将snapshot版本的构件部署到Maven仓库中,其他人只需要在POM添加一个对于你开发模块的依赖,就能随时拿到最新的snapshot。

以下的pom.xml配置和settings.xml能让你通过Maven自动化部署构件:

pom.xml

<project>
...
<distributionManagement>
  <repository>
    <id>nexus-releases</id>
      <name>Nexus Release Repository</name>
      <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>
  </repository>
  <snapshotRepository>
    <id>nexus-snapshots</id>
    <name>Nexus Snapshot Repository</name>
    <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>
...
</project>

settings.xml

<settings>
...
<servers>
  <server>
    <id>nexus-releases</id>
    <username>admin</username>
    <password>admin123</password>
  </server>
  <server>
    <id>nexus-snapshots</id>
    <username>admin</username>
    <password>admin123</password>
  </server>  
</servers>
...
</settings>

这里我们配置所有的snapshot版本构件部署到Nexus的Snapshots仓库中, 所有的release构件部署到Nexus的Releases仓库中。由于部署需要登陆,因为我们在settings.xml中配置对应Repository id的用户名和密码。

然后,在项目目录中执行mvn deploy ,你会看到maven将项目构件部署到Nexus中,浏览Nexus对应的仓库,就可以看到刚才部署的构件。当其他人构建其项目时,Maven就会从Nexus寻找依赖并下载。

 

总结

本文介绍强大的仓库管理器——Nexus,包括如何下载安装Nexus,配置Nexus代理中央仓库,管理Nexus的代理仓库,本地仓库,以及仓库组。并帮助你了解如何通过Nexus搜索构件。最后,如何在Maven中配置Nexus仓库,以及如何部署构件到Nexus仓库中。这些都是Nexus中最基本也是最常用的功能。随着使用的深入,你会发现Nexus还有很多其它的特性,如用户管理,角色权限管理等等。

Nexus的OSS版本是完全开源的,如果你有兴趣,你可以学习其源码,甚至自己实现一个REST客户端。

马上拥抱Nexus吧,它是免费的!

 

91
9
分享到:
评论
43 楼 Wuaner 2014-11-26  
使用 nexus 时,除了在 ~/.m2/settings.xml 中通过 mirrors / profiles 外,有没有更好的方式来覆盖 super POM 中的 central repo?
42 楼 wangshu3000 2014-04-24  
为什么我在3rd Party库里上传个jar会在Release库里出现,3rd Party库还是空的。
41 楼 houzhanshanlinzhou 2014-04-22  
写得非常不错!
40 楼 hanmiao 2013-08-27  
xisuchi 写道
貌似博主已经不在ITeye了.... 
博主自己新开了独立域名的博客,在这里:http://www.juvenxu.com/
39 楼 xisuchi 2013-07-18  
貌似博主已经不在ITeye了.... 
38 楼 jjava33 2013-05-16  
麻烦问一下,我按照 通过Nexus UI部署第三方构件,在nexus中已经成功上传,界面中能看到第三方构件,可是,在开发工具eclipse中报错 missing artifact ,查看本地库,发现没有成功下载,不知是什么原因,请您方便的话,能予以答复,谢谢。
37 楼 liuqing9382 2012-06-28  
图挂了,楼主能补上么?
36 楼 niuqiang2008 2012-03-29  
谢谢您的回答 ... 可惜我不在IT界混了。
35 楼 goodboylll 2012-03-24  
你好,我和6楼的朋友遇见了同样的问题
当我update、repair index的时候  log也是报错
jvm 1    | java.io.FileNotFoundException: nexus-maven-repository-index.properties (item not found)       总是找不到这个文件
但是我看nexus里面的路径指向  是正确的
而且相应的文件也是存在的  就是报错无法找打配置文件

求教啊  谢谢了
34 楼 yangpeihai 2011-12-28  
谢谢,我是在fedora下跑多,非常顺利,收藏啦
33 楼 wmj007 2011-12-16  
探索中,学习了
32 楼 maskwerewolf 2011-09-29  
org.apache.maven.mercury.repository.metadata.MetadataException
mvn deploy nexus 报错, 求解
31 楼 C.T 2011-09-28  
请问用Nexus可以直接下载构件到本地吗?我在Nexus里可以浏览中央仓库的东西,不过不知道怎样下载到本地啊!
30 楼 juvenshun 2011-01-08  
niuqiang2008 写道
希望您能帮我看看 ... 一直没解决

换jdk6或者较新版本的jdk5试试吧
29 楼 niuqiang2008 2011-01-08  
希望您能帮我看看 ... 一直没解决
28 楼 niuqiang2008 2011-01-08  
你好 ,我用如上两种方法都启动不了nexus,报错如下:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet nexus threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595)


root cause

java.lang.IllegalStateException: The PlexusServerServlet couldn't lookup the target component (role='org.restlet.Application', hint='nexus')
org.sonatype.plexus.rest.PlexusServerServlet.createApplication(PlexusServerServlet.java:58)
com.noelios.restlet.ext.servlet.ServerServlet.getApplication(ServerServlet.java:703)
com.noelios.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:818)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595)


root cause

org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Guice provision errors:

1) Error injecting: org.sonatype.nexus.rest.NexusApplication
  at ClassRealm[plexus.core, parent: null]
  at ClassRealm[plexus.core, parent: null]
  while locating org.restlet.Application annotated with @com.google.inject.name.Named(value=nexus)

1 error
      role: org.restlet.Application
  roleHint: nexus
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:238)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:214)
org.sonatype.plexus.rest.PlexusServerServlet.createApplication(PlexusServerServlet.java:49)
com.noelios.restlet.ext.servlet.ServerServlet.getApplication(ServerServlet.java:703)
com.noelios.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:818)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595)


root cause

com.google.inject.ProvisionException: Guice provision errors:

1) Error injecting: org.sonatype.nexus.rest.NexusApplication
  at ClassRealm[plexus.core, parent: null]
  at ClassRealm[plexus.core, parent: null]
  while locating org.restlet.Application annotated with @com.google.inject.name.Named(value=nexus)

1 error
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:952)
org.sonatype.guice.bean.locators.QualifiedBean.getValue(QualifiedBean.java:85)
org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:55)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:234)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:214)
org.sonatype.plexus.rest.PlexusServerServlet.createApplication(PlexusServerServlet.java:49)
com.noelios.restlet.ext.servlet.ServerServlet.getApplication(ServerServlet.java:703)
com.noelios.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:818)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595)


root cause

com.google.inject.ProvisionException: Guice provision errors:

1) Error injecting: org.sonatype.nexus.rest.status.StatusPlexusResource
  at ClassRealm[plexus.core, parent: null]
  at ClassRealm[plexus.core, parent: null]
  while locating org.sonatype.plexus.rest.resource.ManagedPlexusResource annotated with @com.google.inject.name.Named(value=StatusPlexusResource)
  while locating org.sonatype.nexus.rest.NexusApplication

1 error
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:952)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:978)
org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
com.google.inject.Scopes$1$1.get(Scopes.java:63)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:989)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
org.sonatype.guice.bean.locators.QualifiedBean.getValue(QualifiedBean.java:85)
org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:55)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:234)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:214)
org.sonatype.plexus.rest.PlexusServerServlet.createApplication(PlexusServerServlet.java:49)
com.noelios.restlet.ext.servlet.ServerServlet.getApplication(ServerServlet.java:703)
com.noelios.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:818)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595)


root cause

java.lang.TypeNotPresentException: Type org.codehaus.enunciate.contract.jaxrs.ResourceMethodSignature not present
sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:98)
sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:351)
sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:175)
sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
java.lang.reflect.Method.declaredAnnotations(Method.java:676)
java.lang.reflect.Method.getAnnotation(Method.java:663)
com.google.inject.spi.InjectionPoint.getAtInject(InjectionPoint.java:466)
com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:664)
com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:356)
com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:151)
com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:559)
com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:517)
com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:503)
com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:812)
com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:744)
com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:233)
com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:184)
com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:818)
com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:932)
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:965)
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:926)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:978)
org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
com.google.inject.Scopes$1$1.get(Scopes.java:63)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
org.sonatype.guice.bean.locators.QualifiedBean.getValue(QualifiedBean.java:85)
org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:55)
org.sonatype.guice.plexus.binders.PlexusRequirements$RequirementProvider.get(PlexusRequirements.java:222)
org.sonatype.guice.plexus.binders.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:50)
org.sonatype.guice.bean.inject.BeanInjector.injectMembers(BeanInjector.java:53)
com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:120)
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94)
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:253)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:978)
org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
com.google.inject.Scopes$1$1.get(Scopes.java:63)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:989)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
org.sonatype.guice.bean.locators.QualifiedBean.getValue(QualifiedBean.java:85)
org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:55)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:234)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:214)
org.sonatype.plexus.rest.PlexusServerServlet.createApplication(PlexusServerServlet.java:49)
com.noelios.restlet.ext.servlet.ServerServlet.getApplication(ServerServlet.java:703)
com.noelios.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:818)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595)


root cause

java.lang.ClassNotFoundException: org.codehaus.enunciate.contract.jaxrs.ResourceMethodSignature
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:242)
sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)
sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:351)
sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:175)
sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69)
sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52)
java.lang.reflect.Method.declaredAnnotations(Method.java:676)
java.lang.reflect.Method.getAnnotation(Method.java:663)
com.google.inject.spi.InjectionPoint.getAtInject(InjectionPoint.java:466)
com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:664)
com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:356)
com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:151)
com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:559)
com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:517)
com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:503)
com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:812)
com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:744)
com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:233)
com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:184)
com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:818)
com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:932)
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:965)
com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:926)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:978)
org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
com.google.inject.Scopes$1$1.get(Scopes.java:63)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
org.sonatype.guice.bean.locators.QualifiedBean.getValue(QualifiedBean.java:85)
org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:55)
org.sonatype.guice.plexus.binders.PlexusRequirements$RequirementProvider.get(PlexusRequirements.java:222)
org.sonatype.guice.plexus.binders.ProvidedPropertyBinding.injectProperty(ProvidedPropertyBinding.java:50)
org.sonatype.guice.bean.inject.BeanInjector.injectMembers(BeanInjector.java:53)
com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:120)
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94)
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:253)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:978)
org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:996)
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
com.google.inject.Scopes$1$1.get(Scopes.java:63)
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:943)
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:989)
com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:939)
org.sonatype.guice.bean.locators.QualifiedBean.getValue(QualifiedBean.java:85)
org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:55)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:234)
org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:214)
org.sonatype.plexus.rest.PlexusServerServlet.createApplication(PlexusServerServlet.java:49)
com.noelios.restlet.ext.servlet.ServerServlet.getApplication(ServerServlet.java:703)
com.noelios.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:818)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:595





弄了好长时间,网上也没有答案,希望您能帮助我一下...
27 楼 hantsy 2009-07-06  
这个开放版本的试用过,相对其它repository mananger工具没有太大的优势。
pro我很喜欢的一个特性,staging,这个要收费才行。
nexus book 中后面几篇都是基于pro版本的。
希望 maven book 的翻译, nexus章节部分已经从 maven book 抽出成为 nexus book,能够保持在抽出前的版本。
26 楼 juvenshun 2009-06-10  
pinghe 写道

juvenshun 写道pinghe 写道还发现一个问题,使用pro版本,集成LDAP于windows 活动目录,用户的主要组在Selected Role中没有罗列出来pro可是要收费的,仅玩玩试用版,还是你想买阿?试用一下。前面帖子发现中文支持也有问题

Nexus暂时还没有考虑国际化哦
25 楼 pinghe 2009-06-09  
juvenshun 写道

pinghe 写道还发现一个问题,使用pro版本,集成LDAP于windows 活动目录,用户的主要组在Selected Role中没有罗列出来pro可是要收费的,仅玩玩试用版,还是你想买阿?

试用一下。前面帖子发现中文支持也有问题
24 楼 juvenshun 2009-06-09  
pinghe 写道

还发现一个问题,使用pro版本,集成LDAP于windows 活动目录,用户的主要组在Selected Role中没有罗列出来

pro可是要收费的,仅玩玩试用版,还是你想买阿?

相关推荐

    Nexus入门指南(图文).

    Nexus是Maven仓库管理器,它主要用于管理和分发Java软件构建工件,如JAR文件、POM文件等。Nexus的主要作用是作为一个本地代理,缓存远程Maven仓库的构件,从而减少网络带宽的消耗并提高构建速度。此外,Nexus还提供...

    Nexus入门指南.docx

    使用Nexus搭建maven私有仓库,可以在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间

    Maven 构建使用说明文档(含私服Nexus搭建

    ### Maven 构建使用说明及 Nexus 私服搭建详解 #### Maven 概述与核心功能 **Maven** 是一种广泛应用于 Java 开发环境中的自动化构建工具,它以项目对象模型(POM)为基础,通过定义少量的关键信息来管理项目的...

    Nexus_7000 经典入门教程

    Nexus_7000 经典入门教程 比较适合入门和了解Nexus7000

    nexus 2.x 安装配置指南

    ### Nexus 2.x 安装配置指南 #### 概述 Nexus是一款强大的Maven仓库管理工具,由Sonatype提供支持。它可以帮助企业管理和优化Java软件开发生命周期中的依赖关系和构建过程。本文旨在帮助您了解如何安装和配置Nexus...

    思科Nexus_7000入门经典

    思科Nexus_7000入门经典

    思科Nexus-7000入门经典手册和基本的安全配置.rar

    思科Nexus_7000入门经典手册和基本的安全配置

    Nexus Repository Manager的使用

    ### Nexus Repository Manager 使用详解 #### 一、简介 Nexus Repository Manager (NRM) 是一款由Sonatype开发的仓库管理工具,它可以帮助开发者管理和分发软件包及其依赖项。NRM支持多种格式,如Maven、npm、...

    nexus 最新版 nexus-3.12.1-01-unix.tar.gz

    5. **启动与停止Nexus**:使用`sudo -u nexus /opt/nexus/bin/nexus start`启动Nexus,`sudo -u nexus /opt/nexus/bin/nexus stop`停止Nexus。 6. **配置端口和环境变量**:如果需要修改默认的8081端口或其他配置,...

    nexus的linux版本

    Nexus是Sonatype公司开发的一款强大的仓库管理器,主要用于管理和分发Maven、npm、NuGet等不同构建工具的依赖库。在Linux环境下部署Nexus,可以为开发团队提供一个私有的Maven私服,便于控制软件组件的版本,提高...

    nexus私服搭建以及使用教程

    Nexus是一款强大的仓库管理器,由Sonatype公司开发,广泛应用于Java开发领域,尤其是Maven、Gradle等构建工具的项目。本教程将详细介绍如何搭建和使用Nexus私有仓库,帮助你更好地管理和分发你的软件组件。 一、...

    Nexus使用Api进行操作

    Nexus提供了RestApi,但是一部分Api仍然需要结合Groovy等进行操作,在3.3及其以后的版本上进行了强化,但是和普通的RestApi相比仍有一些“使用上的特性”。这篇文章以创建raw的repository为例,来确认一下相关的使用...

    maven 私服 nexus3 安装包

    【 Maven 私服 Nexus3 安装详解及实践】 Maven 私服 Nexus3 是一个企业级的仓库管理工具,它允许开发团队集中管理和分发软件构件,包括 Maven 的 JAR 包、NPM 包、Gradle 构件等。在进行大型项目开发时,私有 Maven...

    Linux版maven私服nexus

    Linux版的Maven私有仓库服务Nexus是一个强大的工具,尤其在Java开发环境中,它用于存储、管理和分发软件库组件。Nexus是Sonatype公司的一款产品,它提供了对Maven、Gradle和其他构建工具的强大支持,使得团队可以更...

    nexus index 索引手动更新

    Nexus是Sonatype公司开发的一款强大的 Maven、NuGet、npm、RubyGems、Pypi等软件包管理器,它提供了一种集中式的方式来管理和存储各种软件仓库中的组件。"nexus index"指的是Nexus仓库中的索引,这个索引包含了仓库...

    最新nexus3国内镜像下载,windows环境下,搭建nexus3私服 pom私服、nmp私服集成

    Nexus3是由Sonatype公司推出的一款开源的Maven仓库管理工具,它为开发人员提供了稳定可靠的存储和分发Maven构件的环境。通过Nexus3,开发团队可以在本地网络中迅速访问所需的构件,从而显著提高构建过程的效率。 在...

Global site tag (gtag.js) - Google Analytics