- 浏览: 1596948 次
- 性别:
- 来自: 苏州
-
文章分类
最新评论
-
payton321:
dao,util,servie,基础模块应该是maven项目, ...
Maven最佳实践:划分模块 -
AdrainHuang:
深有体会,我这边已经 给项目坑死了,依赖关系太复杂,基本没人敢 ...
Maven最佳实践:管理依赖 -
远方_张涛:
赞赞赞,生动有趣还说明问题
Maven最佳实践:版本管理 -
smartdog:
新的网站访问不了啊~~博主快更新
再见JavaEye -
smartdog:
言简意赅,厉害
Maven最佳实践:遵循约定
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吧,它是免费的!
评论



当我update、repair index的时候 log也是报错
jvm 1 | java.io.FileNotFoundException: nexus-maven-repository-index.properties (item not found) 总是找不到这个文件
但是我看nexus里面的路径指向 是正确的
而且相应的文件也是存在的 就是报错无法找打配置文件
求教啊 谢谢了

mvn deploy nexus 报错, 求解
换jdk6或者较新版本的jdk5试试吧
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
弄了好长时间,网上也没有答案,希望您能帮助我一下...
pro我很喜欢的一个特性,staging,这个要收费才行。
nexus book 中后面几篇都是基于pro版本的。
希望 maven book 的翻译, nexus章节部分已经从 maven book 抽出成为 nexus book,能够保持在抽出前的版本。
juvenshun 写道pinghe 写道还发现一个问题,使用pro版本,集成LDAP于windows 活动目录,用户的主要组在Selected Role中没有罗列出来pro可是要收费的,仅玩玩试用版,还是你想买阿?试用一下。前面帖子发现中文支持也有问题
Nexus暂时还没有考虑国际化哦
pinghe 写道还发现一个问题,使用pro版本,集成LDAP于windows 活动目录,用户的主要组在Selected Role中没有罗列出来pro可是要收费的,仅玩玩试用版,还是你想买阿?
试用一下。前面帖子发现中文支持也有问题
还发现一个问题,使用pro版本,集成LDAP于windows 活动目录,用户的主要组在Selected Role中没有罗列出来
pro可是要收费的,仅玩玩试用版,还是你想买阿?
发表评论
-
我的书《Maven实战》
2010-11-12 13:09 70237我本来已经决定停止更新该博客了,但是为了推广下我的新书《Mav ... -
m2eclipse 0.10.0发布
2010-02-22 17:34 8124本文译自 http://www.sonatyp ... -
按需构建多模块,玩转Maven反应堆
2010-01-07 19:57 29680在多模块Maven项目中,反应堆(Reactor)是一个包含了 ... -
Maven仓库的布局
2009-12-14 08:54 12028注:本文节选自我正在 ... -
Maven3初窥
2009-11-10 16:28 20853Maven3的开发已经完成大半,本周末将发布alpha-3(T ... -
Nexus 1.4.0 发布
2009-10-29 17:22 6292新完成的用户故事: [ NEXUS-463] - ... -
archtype:generate出错?
2009-10-12 00:10 8287我们常常会使用mvn archet ... -
你最常用的构建和发布管理工具是什么?
2009-09-13 15:03 13092最近Eclipse社区进行了一项调查,关注社区如何使用Ecli ... -
策划编写《Maven实战》——初步目录
2009-09-09 03:42 83282010-08-27更新 关注 ... -
Maven最佳实践:持续集成
2009-08-21 17:14 0test -
Maven最佳实践:集成web容器
2009-08-21 17:13 0test -
《Maven权威指南》完整发布,带官方PDF
2009-07-06 00:45 676622010/04/29更新 :我已 ... -
Nexus Indexer 2.0:增量下载
2009-05-14 16:33 10381原文:http://www.sonatype.com/peop ... -
Maven最佳实践:版本管理
2009-04-29 00:04 125271什么是版本管理 首先,这里说的版本管理(version ma ... -
Maven最佳实践:Maven仓库
2009-04-01 17:42 111297什么是Maven仓库 在不用M ... -
Maven中央仓库的中国镜像
2009-03-31 22:53 45974(2011-01-27更新,由于私人原因,该镜像已关闭,在此致 ... -
“第十七章 编写插件” 发布
2009-03-09 17:16 3937又是漫长的一章内容,但如同本书的任何一章一样,由于原作者都是M ... -
Maven最佳实践:管理依赖
2009-02-23 16:50 28447"If I have seen further it ... -
m2e:为Eclipse引入Maven(下)
2009-02-04 16:19 30398译自:http://www.sonatype.co ... -
m2e:为Eclipse引入Maven(上)
2009-02-04 14:10 12764译自:http://www.sonatype.co ...
相关推荐
Nexus是Maven仓库管理器,它主要用于管理和分发Java软件构建工件,如JAR文件、POM文件等。Nexus的主要作用是作为一个本地代理,缓存远程Maven仓库的构件,从而减少网络带宽的消耗并提高构建速度。此外,Nexus还提供...
一、项目简介 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷 二、技术实现 jdk版本:1.8 及以上 ide工具:IDEA或者eclipse 数据库: mysql5.5及以上 后端:spring+springboot+mybatis+maven+mysql 前端: vue , css,js , elementui 三、系统功能 1、系统角色主要包括:管理员、用户 2、系统功能 前台功能包括: 用户登录 车位展示 系统推荐车位 立即预约 公告展示 个人中心 车位预定 违规 余额充值 后台功能: 首页,个人中心,修改密码,个人信息 用户管理 管理员管理 车辆管理 车位管理 车位预定管理,统计报表 公告管理 违规管理 公告类型管理 车位类型管理 车辆类型管理 违规类型管理 轮播图管理 详见 https://flypeppa.blog.csdn.net/article/details/146122666
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql 部署环境:maven 数据库工具:navica 更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
内容为Python程序设计的思维导图,适用于新手小白进行浏览,理清思路
2024-Stable Diffusion全套资料(软件+关键词+模型).rar
mmexport1741417035005.png
COMSOL三维锂离子电池全耦合电化学热应力模型:模拟充放电过程中的多物理场耦合效应及电芯内应力应变情况,COMSOL锂离子电池热应力全耦合模型,comsol三维锂离子电池电化学热应力全耦合模型锂离子电池耦合COMSOL固体力学模块和固体传热模块,模型仿真模拟电池在充放电过程中由于锂插层,热膨胀以及外部约束所导致的电极的应力应变情况结果有电芯中集流体,电极,隔膜的应力应变以及压力情况等,电化学-力单向耦合和双向耦合 ,关键词: 1. COMSOL三维锂离子电池模型; 2. 电化学热应力全耦合模型; 3. 锂离子电池; 4. 固体力学模块; 5. 固体传热模块; 6. 应力应变情况; 7. 电芯中集流体; 8. 电极; 9. 隔膜; 10. 电化学-力单向/双向耦合。,COMSOL锂离子电池全耦合热应力仿真模型
基于传递矩阵法的一维层状声子晶体振动传输特性及其优化设计与应用,声子晶体传递矩阵法解析及应用,Matlab 一维层状声子晶体振动传输特性 传递矩阵法在声子晶体的设计和应用中具有重要作用。 通过调整声子晶体的材料、周期和晶格常数等参数,可以设计出具有特定带隙结构的声子晶体,用于滤波、减震、降噪等应用。 例如,通过调整声子晶体的周期数和晶格常数,可以改变带隙的位置和宽度,从而实现特定的频率范围内的噪声控制。 此外,传递矩阵法还可以用于分析和优化声子晶体的透射谱,为声学器件的设计提供理论依据。 ,Matlab; 一维层状声子晶体; 振动传输特性; 传递矩阵法; 材料调整; 周期和晶格常数; 带隙结构; 滤波; 减震; 降噪; 透射谱分析; 声学器件设计,Matlab模拟声子晶体振动传输特性及优化设计研究
头部姿态估计(HeadPose Estimation)-Android源码
永磁同步电机FOC、MPC与高频注入Simulink模型及基于MBD的代码生成工具,适用于Ti f28335与dspace/ccs平台开发,含电机控制开发文档,永磁同步电机控制技术:FOC、MPC与高频注入Simulink模型开发及应用指南,提供永磁同步电机FOC,MPC,高频注入simulink模型。 提供基于模型开发(MBD)代码生成模型,可结合Ti f28335进行电机模型快速开发,可适用dspace平台或者ccs平台。 提供电机控制开发编码器,转子位置定向,pid调试相关文档。 ,永磁同步电机; FOC控制; MPC控制; 高频注入; Simulink模型; 模型开发(MBD); Ti f28335; 电机模型开发; dspace平台; ccs平台; 编码器; 转子位置定向; pid调试。,永磁同步电机MPC-FOC控制与代码生成模型
light of warehouse.zip
内容概要:文章深入讨论了工业乙醇发酵的基本原理及工艺流程,特别是在温度和气体排放(如CO2及其他有害气体)影响下的发酵效果分析。文章介绍了乙醇发酵的重要环节,如糖分解、代谢路径、代谢调控以及各阶段的操作流程,重点展示了如何通过Matlab建模和仿真实验来探索这两个关键环境因素对发酵过程的具体影响。通过动态模型仿真分析,得出合适的温度范围以及适时排除CO2能显著提升发酵产乙醇的效果与效率,从而提出了基于仿真的优化发酵生产工艺的新方法。 适用人群:从事生物工程相关领域研究的科学家、工程师及相关专业师生。 使用场景及目标:适用于实验室环境、学术交流会议及实际生产指导中,以提升研究人员对该领域内复杂现象的理解能力和技术水平为目标。 其他说明:附录中有详细的数学公式表达和程序代码可供下载执行,便于有兴趣的研究团队重复实验或者继续扩展研究工作。
本资源包专为解决 Tomcat 启动时提示「CATALINA_HOME 环境变量未正确配置」问题而整理,包含以下内容: 1. **Apache Tomcat 9.0.69 官方安装包**:已验证兼容性,解压即用。 2. **环境变量配置指南**: - Windows 系统下 `CATALINA_HOME` 和 `JAVA_HOME` 的详细配置步骤。 - 常见错误排查方法(如路径含空格、未生效问题)。 3. **辅助工具脚本**:一键检测环境变量是否生效的批处理文件。 4. **解决方案文档**:图文并茂的 PDF 文档,涵盖从报错分析到成功启动的全流程。 适用场景: - Tomcat 9.x 版本环境配置 - Java Web 开发环境搭建 - 运维部署调试 注意事项: - 资源包路径需为纯英文,避免特殊字符。 - 建议使用 JDK 8 或更高版本。
这是一款仿照京东商城的Java Web项目源码,完美复现了360buy的用户界面和购物流程,非常适合Java初学者和开发者进行学习与实践。通过这份源码,你将深入了解电商平台的架构设计和实现方法。欢迎大家下载体验,提升自己的编程能力!
系统选用B/S模式,后端应用springboot框架,前端应用vue框架, MySQL为后台数据库。 本系统基于java设计的各项功能,数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。 在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。
这是一款专为大学生打造的求职就业网JavaWeb毕业设计源码,功能齐全,界面友好。它提供简历投递、职位搜索、在线交流等多种实用功能,能够帮助你顺利进入职场。无论你是想提升技术水平还是寻找灵感,这个源码都是不可多得的资源。快来下载,让你的求职之路更加顺畅吧!
useTable(1).ts
实验一: 1、进行CCS6.1软件的安装,仿真器的设置,程序的编译和调试; 2、熟悉CCS软件中的C语言编程; 3、使用按键控制LED跑马灯的开始与停止、闪烁频率; 4、调试Convolution、FFT、FIR、FFT-FIR实验,编制IIR算法并调试,并在CCS软件上给出实验结果。 实验二: 1、利用定时器周期中断或下溢中断和比较器比较值的修改来实现占空比可调的PWM波形; 2、改变PWM占空比控制LED灯的亮暗,按键实现10级LED灯亮暗调整; 3、模拟数字转换,转换过程中LED指示,并在变量窗口显示转换结果; 4、数字模拟转换,产生一个正弦波,转换过程中LED指示,转换完成后在CCS调试窗口显示波形。 实验三: 1、SCI异步串行通信实验; 2、SPI及IIC同步串行通信实验; 3、CAN现场总线串行通信实验; 4、传输过程中LED指示。 实验四: 1、电机转速控制实验。
LINUX系统管理与配置.docx