将第三方依赖项部署到maven存储库的简便方法

rek*_*nuc 5 java deployment repository nexus maven

我为一个非常严格控制的组织工作,绝对不允许访问外部存储库.

我想为我们的应用程序使用Spring和Hibernate框架,并使用maven来解决依赖关系并构建项目.

我在本地服务器上建立了一个nexus"第三方"存储库,现在实际上是添加库的一部分.Hibernate 3.6.7.Final附带以下罐子:

./hibernate-testing.jar
./hibernate3.jar
./lib/required/commons-collections-3.1.jar
./lib/required/dom4j-1.6.1.jar
./lib/required/jta-1.1.jar
./lib/required/slf4j-api-1.6.1.jar
./lib/required/antlr-2.7.6.jar
./lib/required/javassist-3.12.0.GA.jar
./lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar
./lib/optional/c3p0/c3p0-0.9.1.jar
./lib/optional/swarmcache/swarmcache-1.0RC2.jar
./lib/optional/proxool/proxool-0.8.3.jar
./lib/optional/jbosscache/jbosscache-core-3.2.1.GA.jar
./lib/optional/oscache/oscache-2.1.jar
./lib/optional/infinispan/infinispan-core-4.2.1.CR1.jar
./lib/bytecode/javassist/javassist-3.12.0.GA.jar
./lib/bytecode/cglib/cglib-2.2.jar
Run Code Online (Sandbox Code Playgroud)

Spring 3.0.6.RELEASE附带以下内容:

org.springframework.aop-3.0.6.RELEASE.jar                
org.springframework.jdbc-3.0.6.RELEASE.jar
org.springframework.asm-3.0.6.RELEASE.jar                
org.springframework.jms-3.0.6.RELEASE.jar
org.springframework.aspects-3.0.6.RELEASE.jar            
org.springframework.orm-3.0.6.RELEASE.jar
org.springframework.beans-3.0.6.RELEASE.jar              
org.springframework.oxm-3.0.6.RELEASE.jar
org.springframework.context-3.0.6.RELEASE.jar            
org.springframework.test-3.0.6.RELEASE.jar
org.springframework.context.support-3.0.6.RELEASE.jar    
org.springframework.transaction-3.0.6.RELEASE.jar
org.springframework.core-3.0.6.RELEASE.jar               
org.springframework.web-3.0.6.RELEASE.jar
org.springframework.expression-3.0.6.RELEASE.jar         
org.springframework.web.portlet-3.0.6.RELEASE.jar
org.springframework.instrument-3.0.6.RELEASE.jar         
org.springframework.web.servlet-3.0.6.RELEASE.jar
org.springframework.instrument.tomcat-3.0.6.RELEASE.jar  
org.springframework.web.struts-3.0.6.RELEASE.jar
Run Code Online (Sandbox Code Playgroud)

据我所知,部署依赖项的两种首选方法是

1)设置一个pom; 使用命令"mvn deploy"

2)使用命令行,对于个别罐子:

 mvn deploy:deploy-file -Durl=file://C:\m2-repo \

                   -DrepositoryId=some.id \

                   -Dfile=your-artifact-1.0.jar \

                   [-DpomFile=your-pom.xml] \

                   [-DgroupId=org.some.group] \

                   [-DartifactId=your-artifact] \

                   [-Dversion=1.0] \

                   [-Dpackaging=jar] \

                   [-Dclassifier=test] \

                   [-DgeneratePom=true] \

                   [-DgeneratePom.description="My Project Description"] \

                   [-DrepositoryLayout=legacy] \

                   [-DuniqueVersion=false]
Run Code Online (Sandbox Code Playgroud)

1)我知道我可以为整个hibernate项目创建一个pom,或者创建多个pom,我猜每个外部库都有1个pom.例如,cglib-2.2.jar可以是它自己的pom,因为我知道spring有一个类似的依赖,所以为了没有(2)x cglib(s),我有1个cglib然后包含它分别是我的org.spring和org.hibernate poms中的依赖项.

对于2)我想我可以编写一个shell脚本来读取文件列表并从某个地方解析出另一个列表中的GAV信息,然后将它们转储到repo 1,然后每个jar将在项目的POM中列为依赖项.

最后一部分是我觉得令人困惑的......如果我将整个Spring版本部署为1组 - org.Spring和Hibernate在另一个org.Hibernate中,那么依赖项之间是否会发生冲突(例如cglib)?

所以我想我的问题是:

将下载的Spring和Hibernate版本部署到我的本地nexus存储库所需的最简单,最快速,最省力的方法是什么,以便我可以在项目中快速使用它们?(无需在太多poms中列出太多依赖项.)


编辑:

对我想要的东西稍作澄清.我有1个Nexus管理器在本地服务器上运行(可以访问Internet).我希望能够从Internet存储库下载运行Spring和Hibernate所需的所有依赖项.我想这样做ONLY ONCE,然后让他们坐在我的内部存储库(的Nexus),我希望永远不要跟中央时,JBoss,Spring或其他公共 REPOSITORY直到我专门允许它.我希望能像开关那样打开和关闭它.

ON模式=" 你可以从公共回购中获取依赖关系"

关闭模式="你不能连接到任何外部"

在我看来,通过执行以下操作,这是可以实现的:

在Nexus

1)建立一个小组

2)为您需要的每个外部存储库设置代理

3)将所有代理放在一个组中

在开发工作站上(这是我不确定的部分)

1)编辑settings.xml以覆盖中心位置并将存储库指向本地nexus组,如下所述:

maven存储库镜像

和这里

禁用Maven中央存储库

和这里

http://www.sonatype.com/books/nexus-book/reference/maven-sect-single-group.html

2)运行mvn install或compile或者其他什么,以便它抓取依赖项.

在那之后,我不确定它是如何工作的.以某种方式告诉maven在我当地的一个Nexus存储库中镜像外部组?我想我会试试并回来并发布我的解决方案,如果成功的话.在此期间,请随时评论或建议.

Man*_*ser 4

Nexus 具有采购功能,可以严格控制从外部进入仓库的内容,同时仍然使用来自上游的原始 pom。如果没有它们,您将丢失所有传递依赖信息,并且很可能会破坏您将来的构建或运行时部署。

JFrog Artifactory 有类似的免费功能(可以定义包含/排除模式)。

  • Nexus 绝对是您的最佳选择。很棒的工具。 (2认同)
  • 3 年后,在这个问题上,Nexus 绝对不是获得追捧功能的最佳途径。使用jfrog的artifactory,您可以将其部署为jenkins中的插件,并获得maven存储库布局,并控制进出内容+日志审计*免费* (2认同)