java - 将 3rd 方依赖项部署到 Maven 存储库的简单方法

标签 java deployment maven repository nexus

我在一个控制非常严密的组织工作,该组织绝对不允许访问外部存储库。

我想为我们的应用程序使用 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 组,如下所述:

maven repository mirrors

这里

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/

相关文章:

适用于 Windows Server 的 ServiceBus 上的 Java - 选项?

java - Android 位图图像到 Unity C# 纹理

java - 如何使用ProcessBuilder将EAR文件部署到wildfly服务器?

maven - 可以将多模块 Maven 原型(prototype)设置为具有可选模块吗?

java - 生成 WSDL 客户端时 Maven 构建期间出错 : "error: package com.ibm.ws.webservices.engine.encoding does not exist"

java - Java 中的 BlackJack 与庄家玩家具有相同的牌组

java - System.nanotime运行缓慢?

java - 如何在 Google Cloud Compute Engine 中部署 Spring Boot 应用程序?

python - 在 PyCharm 中通过 SFTP 连接到部署服务器不起作用

java - 重新打包依赖并修复pom