禁用Maven中央存储库

我的公司的政策皱眉自动下载的工件(他们必须被批准),所以为了使用Maven我需要禁用访问Maven的中央存储库。

换句话说,我不希望Maven尝试从中央下载任何内容。

我知道如何configuration本地存储库(联网或不),我的想法是使用“幸运”的机器来更新本地存储库。

PS:我可以在代理/networking级别阻止请求,但是我正在问如何使用Maven的configuration来完成这个请求。

更新我终于想出了如何做到这一点。 在maven的家中,在conf目录下是一个全局的settings.xml 。 你可以设置一个镜像来指向某个内部服务器,或者直接覆盖它的定义。

同意。 在发布版本中不应该允许外部存储库的直接下载。

你的问题的具体答案是我的答案的第二部分:-)

设置资源库pipe理器

我build议设置一个本地的Maven仓库pipe理器。 好的select如下:

  • 关系
  • Artifactory的
  • Archiva

所有这些都可以充当外部可用的Maven中央jar的caching代理。

你也可能对Nexus的Profession版本感兴趣。 它包括一个pipe理外部图书馆的采购套件 。 它还提供了Maven插件,用于集中pipe理Maven设置文件,这是我答案的第二部分。

本地Maven设置

更新位于以下目录中的设置文件 :

$ HOME / .m2目录/ settings.xml中

指定所有中央请求应该redirect到本地Maven存储库:

 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <mirrors> <mirror> <id>central-proxy</id> <name>Local proxy of central repo</name> <url>http://<hostname>/central</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> ... </settings> 

我发现configuration工件parsing页面很有帮助。 它说明了以下关于“镜像任何”的设置。

不要单独使用“镜像”作为唯一的解决scheme规则。 使用它可以严格通过Artifactory强制执行任何工件parsing。 “镜像任意”代理configuration适用于定义的存储库。 它将取代但不隐藏内置的中央和快照存储库,除非被用户覆盖。 它定义了一个粗粒度的代理规则,它不区分发行版本和快照,并且依赖定义的存储库来执行这个分辨率过滤。

Maven的超级POM定义了中央仓库。 以下是如何覆盖中央存储库和发行版和快照的插件库:

 <repositories> <repository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://repo1.maven.org/maven2</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> 

当然你应该有一个替代configuration,正如接受的答案所述。

如果公司范围内的存储库应该处理所有的工件请求,您可以configuration一个存储库来镜像$MAVEN_HOME/conf/settings.xml

 <mirror> <id>internal-repository</id> <name>Maven Repository Manager running on repo.mycompany.com</name> <url>http://repo.mycompany.com/proxy</url> <mirrorOf>*</mirrorOf> </mirror> 

资源

最简单的方法是使用-o参数告诉maven在离线模式下运行。 当然,你需要确保你的本地仓库拥有你需要的所有东西,但是这样至less可以把你自动连接到一个未经批准的仓库的安全问题排除在外。

听起来像某人正在积极尝试实施您的开源治理政策。 听起来还不错。

同意这里的其他评论关于使用内部存储库pipe理器来托pipeMaven所需的组件。

正如Rory提到的那样,在停止访问Maven Central(Central Repository)或任何其他公共开源存储库之前,您需要确保拥有该存储库中所需的所有内容。

Mark对Nexus的采购能力提出了很高的评价。 一旦该内部回购pipe理器设置了所有“批准”的组件,您也可以打开Nexus存储库运行状况检查function (它是免费的),报告所有组件许可证,已知安全漏洞等等在你的回购。

充分披露,我为Sonatype工作。

我有同样的问题,但有其他原因。 解决scheme是停用Avira浏览器保护(在德国浏览器Schutz)。 我从m2e拿来的解决scheme不能从nexus传输元数据,但maven的命令行可以 。