如何禁用maven阻止外部HTTP repositores?

如何禁用maven阻止外部HTTP repositores?,maven,maven-3,Maven,Maven 3,Maven自3.8.1版起默认阻止外部HTTP存储库(请参阅) 有没有一种方法可以禁用该规则或免除存储库遵守此规则?我通过检查Maven git存储库中负责默认HTTP阻塞的提交,找到了一种解决方案: 我的解决方案如下: 在Maven设置中(位于${Maven.home}/conf/settings.xml或${user.home}/.m2/settings.xml),必须删除以下条目: <mirror> <id>maven-default-http-blocker&

Maven自3.8.1版起默认阻止外部HTTP存储库(请参阅)


有没有一种方法可以禁用该规则或免除存储库遵守此规则?

我通过检查Maven git存储库中负责默认HTTP阻塞的提交,找到了一种解决方案:

我的解决方案如下:

在Maven设置中(位于
${Maven.home}/conf/settings.xml
${user.home}/.m2/settings.xml
),必须删除以下条目:

<mirror>
  <id>maven-default-http-blocker</id>
  <mirrorOf>external:http:*</mirrorOf>
  <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
  <url>http://0.0.0.0/</url>
  <blocked>true</blocked>
</mirror>
标记中,您需要指定被阻止的存储库,并在
标记中再次指定存储库的原始url。您需要为所有被阻止的存储库创建此取消阻止镜像

示例:

如果在
pom.xml
中定义了以下HTTP存储库:

<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>central</id>
        <name>libs-release</name>
        <url>http://my-url/libs-release</url>
    </repository>
    <repository>
        <id>snapshots</id>
        <name>libs-snapshot</name>
        <url>http://my-url/libs-snapshot</url>
    </repository>
</repositories>
<mirrors>
    <mirror>
        <id>release-http-unblocker</id>
        <mirrorOf>central</mirrorOf>
        <name></name>
        <url>http://my-url/libs-release</url>
        <blocked>false</blocked>
    </mirror>
    <mirror>
        <id>snapshot-http-unblocker</id>
        <mirrorOf>snapshots</mirrorOf>
        <name></name>
        <url>http://my-url/libs-snapshot</url>
        <blocked>false</blocked>
    </mirror>
</mirrors>

我希望我的工作能帮助其他偶然发现这一点的人。但是,如果您有更优雅或更好的解决方案,请与我们分享

另一种可能的解决方案/解决方法是通过注释掉maven's'main'
settings.xml
文件的
部分中的
maven default http blocker
镜像来覆盖新的默认http阻塞行为(在我的例子中,在
/opt/maven/conf
下)



另外,解除对所有不安全的http存储库的阻止是否是一个好主意完全是另外一回事。

您应该在http存储库中添加一个镜像,允许在maven设置中使用http。您不应该消除所有存储库的默认maven行为。然后告诉您的devops团队使用https

.m2/settings.xml
中:

<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>central</id>
        <name>libs-release</name>
        <url>http://my-url/libs-release</url>
    </repository>
    <repository>
        <id>snapshots</id>
        <name>libs-snapshot</name>
        <url>http://my-url/libs-snapshot</url>
    </repository>
</repositories>
<mirrors>
    <mirror>
        <id>release-http-unblocker</id>
        <mirrorOf>central</mirrorOf>
        <name></name>
        <url>http://my-url/libs-release</url>
        <blocked>false</blocked>
    </mirror>
    <mirror>
        <id>snapshot-http-unblocker</id>
        <mirrorOf>snapshots</mirrorOf>
        <name></name>
        <url>http://my-url/libs-snapshot</url>
        <blocked>false</blocked>
    </mirror>
</mirrors>

我的回购镜像
我的回购HTTP镜像
http://url-to.my/repo
我的回购协议
假的

您是否处于公司环境中?如果是这样,请配置一个
*
并重定向到您的内部存储库管理器?@khmarbaise我找到了一个解决方案(请参阅我的答案),其中我为每个被阻止的存储库显式配置了一个镜像。在您的解决方案中,使用一个通配符作为
mirrorOf
,我无法区分存储库,例如,每个快照和版本都有一个存储库。或者我可以?你可以。请参阅(settings.xml文件)…mirrorOf帮助我防止在发现新的repo时更改某些内容。。。维修所有请求都被重定向到repository manager,它已经阻止了所有内容…而且我永远不会在
.mvn
中放置
settings.xml
,最好使用配置文件提供程序插件(Jenkins)来处理这些内容,包括凭据。。。。永远不要允许在pom文件中定义回购…@khmarbaise我明白你的意思。我同意,这将是一个更好的配置。然而,我的情况不同,我需要利用我所拥有的。我有20个项目,在每个pom文件中定义了存储库。由于maven更新到了3.8.1,所有的构建都失败了,因为repositores是HTTP,而不是HTTPS。我使用JFrog Artifactory作为回购管理器有一个简单的方法:使用Maven 3.6.3.;-)这是我期待的工作。“是否有可能通过通配符解除所有被阻止的回购?”Antoniopetrica在我的测试中,它不起作用。