我在一个控制非常严密的组织工作,该组织绝对不允许访问外部存储库。
我想为我们的应用程序使用 Spring 和 Hibernate 框架,并使用 maven 来解决依赖关系和构建项目。
我已经在本地服务器上设置了一个 nexus“第 3 方”存储库,现在是实际添加库的部分。 Hibernate 3.6.7.Final 带有以下 jar:
./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
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
我知道部署依赖项的两种首选方法是
1) 设置pom;使用命令“mvn deploy”
2) 像这样使用命令行,对于单个 jar :
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]
对于 1) 我知道我可以为整个 hibernate 项目创建一个 pom,或者创建多个 pom,我猜每个外部库 1 个。例如,cglib-2.2.jar 可以是它自己的 pom,因为我知道 spring 有类似的依赖性,所以为了没有 (2)x cglib(s),我有 1 个 cglib,然后将它包含为分别依赖于我的 org.spring 和 org.hibernate poms。
对于 2) 我想我可以编写一个 shell 脚本来读取文件列表并从某个地方的另一个列表中解析出 GAV 信息并将它们 1 个 1 个转储到 repo,然后每个 jar 将在我的项目的 POM 中列为依赖项.
这最后一部分让我感到困惑...如果我将整个 Spring 版本部署为一组 - org.Spring 和 Hibernate 在另一个 org.Hibernate 中,依赖项之间是否会发生冲突(例如 cglib)?
所以我想我的问题是:
将下载的 Spring 和 Hibernate 版本部署到我的本地 nexus 存储库以便我可以在我的项目中快速使用它们的最简单、最快、所需工作量最少的方法是什么? (无需在太多 poms 中列出太多依赖项。)
编辑:
稍微澄清一下我想要什么。我有 1 个 Nexus 管理器在本地服务器上运行(可以访问 Internet)。我希望能够从 Internet 存储库 下载运行 Spring 和 Hibernate 所需的所有依赖项。我只想一次这样做,然后让他们坐在我的内部存储库(Nexus)中,我想永远不会与中央对话、jboss、spring 或任何其他PUBLIC 存储库,直到我明确 允许它。我希望能够像开关一样打开和关闭它。
ON mode = "你可以从公共(public)仓库获取依赖项"
OFF mode = "you must not connect to anything external"
在我看来,这可以通过执行以下操作来完成:
在 Nexus 中
1) 建立群组
2) 为您需要的每个外部存储库设置代理
3) 将所有代理放在一组
在开发工作站上(这是我不确定的部分)
1) 编辑 settings.xml 以覆盖中心位置并将存储库指向本地 nexus 组,如下所述:
这里
Disable Maven central repository
这里
http://www.sonatype.com/books/nexus-book/reference/maven-sect-single-group.html
2) 运行 mvn install 或 compile 或其他任何东西,以便它获取依赖项。
在那之后我不太确定它会如何运作。以某种方式告诉 Maven 在我的本地 Nexus 存储库之一中镜像外部组?我想我会尝试一下,如果成功的话会回来发布我的解决方案。同时,请随时发表评论或建议。
最佳答案
Nexus 具有采购功能,可以在仍然使用来自上游的原始 pom 的同时,严格控制从外部进入您的 repo 的内容。没有它们,您将丢失所有传递依赖信息,并且很可能会在将来破坏您的构建或运行时部署。
JFrog Artifactory 有一个免费的类似功能(可以定义包含/排除模式)。
关于java - 将 3rd 方依赖项部署到 Maven 存储库的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837183/