【问题标题】:Howto disable mirror repository in maven settings如何在 Maven 设置中禁用镜像存储库
【发布时间】:2011-06-23 23:41:39
【问题描述】:

在我的 maven ~./.m2/settings.xml 中,我定义了一个镜像和一些存储库:

 <mirrors>
    <mirror>
    <id>someid</id>
        .....
    </mirro>
 </mirrors>
...

<profiles>
    <profile>
         <id>default</id>
            <activation>
                     <activeByDefault>true</activeByDefault>
                 </activation>
                 <repositories>
            <repository>                                                                    <id>repo....</id>
....

         </profile>
</profiles>

这很好用。

有些项目我想禁用镜像和默认配置文件。 我知道我可以为存储库定义一个单独的配置文件,但我不知道如何告诉 maven eclipse 插件不要使用默认配置文件或特定配置文件。 另外:如何更改项目的镜像?

【问题讨论】:

    标签: maven maven-plugin


    【解决方案1】:

    不幸的是,这对于单个 settings.xml 是不可能的。 Maven JIRA 有功能请求,投这个吧!

    解决方法是有两个 settings.xml 并使用选定的配置运行 maven:

    mvn -s my-settings.xml
    

    【讨论】:

    • 哇,引用的功能请求现已开放 7 年。
    • 好主意.. 这个答案节省了我很多时间!谢谢。
    【解决方案2】:

    复制settings.xml 文件,删除mirror 条目并告诉maven 使用--settings file 命令行选项。

    使用 XSLT 或像 XMLStarlet 这样的命令行工具来自动化该过程:

    xmlstarlet ed -N 's=http://maven.apache.org/SETTINGS/1.0.0' --delete "//s:mirror" settings.xml
    

    将新的settings.xml 文件打印到不包含任何镜像设置的stdout

    更新:XML 命名空间最近已更改。确保使用与文件顶部相同的字符串。感谢Roman Ivanov 指出这一点。

    【讨论】:

    • 如果基于 XSLT 的工具不可用,在 sed 中:sed settings.xml -e "/&lt;mirrors&gt;/,/&lt;\/mirrors&gt;/ d"
    • 注意命名空间,它应该与文件中的相同,最近的设置架构不同1.1.0,所以使用xmlstarlet ed --inplace -N s="http://maven.apache.org/SETTINGS/1.1.0" -d "//s:mirrors" settings.xml
    【解决方案3】:

    我认为不需要多个settings.xml

    可以使用配置文件控制镜子。

    我可以为我的存储库使用属性id,例如后缀${repo-suffix}

    $ mvn help:effective-pom | grep "<distributionManagement>" -A 3
      <distributionManagement>
        <repository>
          <id>deployment${repo-suffix}</id>
          <name>Internal Releases</name>
    

    然后我可以将repo-suffix 添加到配置文件中,例如为其赋予值-1

    <profile>
      <id>my-profile</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
        <properties>
          <repo-suffix>-1</repo-suffix>
          ...
    

    这样我现在在 pom 文件中有一个动态定义的存储库 ID。

    $ mvn help:effective-pom | grep "<distributionManagement>" -A 3
      <distributionManagement>
        <repository>
          <id>deployment-1</id>
          <name>Internal Releases</name>
    

    对于这些deployment-1 存储库,我可以在我的settings.xml 中定义镜像。这实际上与将镜子放在配置文件中相同。

    【讨论】:

      【解决方案4】:

      settings.xml 中的条目适用于系统上的所有 maven 项目,因此并不意味着为单个项目量身定制。

      如果您希望不同的项目有不同的profiles,那么您应该在项目的pom 中指定它们。你的~/m2/settings.xml 中不需要有&lt;profiles&gt; 部分。

      至于&lt;mirrors&gt;,它们适用于您要镜像的repositories。您可以选择需要镜像哪些存储库,但不能选择哪些项目应该使用镜像,哪些不应该。如果您不希望从远程存储库下载项目,您始终可以在 offline 模式下运行该项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        • 2011-03-18
        相关资源
        最近更新 更多