禁用Maven中央存储库

时间:2011-02-14 21:01:04

标签: configuration maven repository

我公司的政策对自动下载的工件(它们必须得到批准)不满意,因此为了使用Maven,我需要禁用对Maven中央存储库的访问。

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

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

PS:我可以阻止代理/网络级别的请求,但我问的是如何使用Maven的配置。

更新 我终于想出了怎么做。在maven的家中,conf目录中是全局settings.xml。 您可以将镜像设置为指向某个内部服务器的central,或者只是覆盖它的定义。

7 个答案:

答案 0 :(得分:43)

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

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

设置存储库管理器

我建议您设置一个本地Maven存储库管理器。好的选择如下:

所有这些都能够充当外部可用的Maven中央罐的缓存代理。

您可能也对Nexus的专业版感兴趣。它包括用于管理外部库的Procurement suite。它还提供了Maven插件,用于集中管理Maven设置文件,这是我答案的第二部分......

本地Maven设置

更新以下目录中的settings file

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

指定应将所有中央请求重定向到本地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>

答案 1 :(得分:40)

我发现Configuring Artifacts Resolution page很有帮助。 它陈述了关于“镜像任何” - 设置的以下内容。

  

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

Super POM of Maven定义了中央存储库。以下是如何覆盖版本和快照的中央存储库和插件存储库:

<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>

当然,您应该配置替换件,如接受的答案所述。

答案 2 :(得分:5)

如果公司范围的存储库应该处理所有工件请求,您可以配置单个存储库来镜像$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>

Source

答案 3 :(得分:4)

最简单的方法是使用-o参数告诉maven在脱机模式下运行。当然,您需要确保您的本地仓库拥有您需要的一切,但这至少可以解决您自动连接到未经批准的仓库时可能遇到的任何安全问题。

答案 4 :(得分:3)

听起来有人正在积极尝试执行您的开源治理政策。很高兴听到。

同意此处有关使用内部存储库管理器来托管Maven所需组件的其他评论。

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

Mark对Nexus的采购能力提出了一个很好的观点。一旦内部回购经理与您的所有&#34;已批准&#34;组件,您还可以打开Nexus Repository Health Check feature(它是免费的),报告您的回购中的组件的所有组件许可证,已知安全漏洞等。

完全披露,我为Sonatype工作。

答案 5 :(得分:2)

过去我发现最强大的解决方案是手动覆盖内置存储库。我发现这种方法比更改父POM,settings.xml,镜像或配置文件更好。对于所有内部项目,将下面的设置放入他们的POM中。

<repositories>
    <repository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://internalrepo</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>snapshots</id>
        <url>http://internalrepo</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>

答案 6 :(得分:0)

我有同样的问题,但有其他原因。解决方案是停用Avira Browser Protection(德语Browser-Schutz)。我从m2e cannot transfer metadata from nexus, but maven command line can开始了解。