首页 文章

我怎样才能让Maven停止尝试从maven-central-repo检查来自某个组的工件的更新?

提问于
浏览
112

我正在研究一个相当大的Maven项目 . 我们可能有大约70个左右的单个工件,它们大致分为两个共享代码库,也许有十个使用它们的应用程序 . 所有这些项都存在于命名空间 com.mycompany.* 中 .

大部分时间我们都在针对快照构建运行 . 因此,为了完整构建应用程序,我可能首先构建库项目,以便将它们安装到我的本地存储库(例如, mycompany-libname-2.4-SNAPSHOT.jar ) .

问题是,当我然后构建应用程序 . 出于某种原因,Maven想要检查主要的两个公共存储库(maven-net-repo和java-net-repo)以获取所有 mycompany-*-SNAPSHOT.jar 工件的更新 . 当然,他们不像Maven那样停止这样做,因为(a)它让我感觉自己像是一个糟糕的net.citizen,不断检查这些存储库中的东西永远不会存在,并且(b)它增加了一些不必要的烦恼网络延迟进入我的构建过程 .

我've taken to running maven in offline mode most of the time to work around this, but that'不理想,因为偶尔会更新对公共图书馆的依赖 . 所以,如果Maven忽略了 com.mycompany 命名空间中的SNAPSHOT版本或工件,我会很高兴 .

6 回答

  • 4

    现在在maven中也可以使用的东西是

    mvn goal --no-snapshot-updates
    

    或简而言之

    mvn goal -nsu
    
  • 30

    updatePolicy标记对我不起作用 . 但Rich Seller提到应该禁用快照,所以我进一步观察并注意到我添加到settings.xml的额外存储库实际上导致了问题 . 在我的settings.xml中将快照部分添加到此存储库就可以了!

    <repository>
        <id>jboss</id>
        <name>JBoss Repository</name>
        <url>http://repository.jboss.com/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    
  • 28

    此外,您可以在mvn命令行中使用 -o--offline ,这将把maven放在"offline mode"中,因此它赢得了一些关于无法获取本地仓库中尚未存在的依赖关系的警告,但没什么大不了的 .

  • 0

    更新:我应该从这开始,因为你的项目是SNAPSHOTs . 它是SNAPSHOT语义的一部分,Maven将检查每个构建的更新 . 作为SNAPSHOT意味着它是易变的并且可能会发生变化,因此应该检查更新 . 但是值得指出的是Maven super POM配置中心禁用快照,因此Maven不应该在你自己的pom / settings中覆盖它 .


    您可以将Maven配置为使用mirror作为中央存储库,这将重定向通常发送到内部存储库的所有请求 .

    在您的settings.xml中,您将添加类似这样的内容以将内部存储库设置为中央镜像:

    <mirrors>
      <mirror>
        <id>ibiblio.org</id>
        <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
        <url>http://path/to/my/repository</url>
        <mirrorOf>central</mirrorOf>
      </mirror>
    </mirrors>
    

    如果您使用像Nexus这样的存储库管理器作为内部存储库 . 您可以为代理中心设置proxy repository,因此通常转到Central的任何请求都会发送到您的代理存储库(或包含代理的repository group),后续请求将缓存在内部存储库管理器中 . 您甚至可以将代理缓存超时设置为-1,因此它永远不会从代理存储库中已有的中心请求内容 .


    如果您只使用本地存储库,则更基本的解决方案是将中央存储库的updatePolicy设置为"never",这意味着Maven将只检查本地存储库中尚未存在的工件 . 然后,可以在需要时通过使用-U开关强制Maven检查更新,在命令行覆盖它 .

    您可以按如下方式配置存储库(在您的pom或settings.xml中的配置文件中):

    <repository>
      <id>central</id>
      <url>http://repo1.maven.org/maven2</url>
      <updatePolicy>never</updatePolicy>
    </repository>
    
  • 80

    非常简单 :

    在您的Super POM父级或setting.xml中,使用

    <repository>
            <id>central</id>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <updatePolicy>never</updatePolicy>
            </snapshots>
            <url>http://repo1.maven.org/maven2</url>
            <layout>legacy</layout>
        </repository>
    

    这是我的提示

  • 149

    我有类似的麻烦,

    <repository>
        <id>java.net</id>
        <url>https://maven-repository.dev.java.net/nonav/repository</url>
        <layout>legacy</layout>
    </repository>
    <repository>
        <id>java.net2</id>
        <url>https://maven2-repository.dev.java.net/nonav/repository</url>
    </repository>
    

    将updatePolicy设置为"never"不起作用 . 删除这些回购是我解决它的方式 . ps:我正在关注这个关于Web服务的tutorial(顺便说一下,可能是java的ws最好的教程)

相关问题