1. ホーム
  2. maven

[解決済み] mavenが外部HTTPレポジトリをブロックするのを無効にするにはどうすればよいですか?

2022-01-31 09:22:02

質問

Mavenはバージョン3.8.1以降、デフォルトで外部HTTPリポジトリをブロックしています( https://maven.apache.org/docs/3.8.1/release-notes.html )

これを無効にする方法、またはこのルールからリポジトリを除外する方法はありますか?

解決方法は?

私は、デフォルトのHTTPブロッキングを担当しているMavenのgitリポジトリのコミットを検査することで、これを行う解決策を見つけました。 https://github.com/apache/maven/commit/907d53ad3264718f66ff15e1363d76b07dd0c05f

私の解決策は以下の通りです。

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

プロジェクトで作業していて、他の人とコードを共有していたり、自動テストでCI/CDを使用したいなどの理由で、Mavenの設定を常にこのようにすることができない場合、次のようにすることができます。 : という名前のディレクトリを追加します。 .mvn をプロジェクトに追加します。その中の .mvn という名前のファイルを追加します。 maven.config という内容で --settings ./.mvn/local-settings.xml . その中で .mvn という名前のファイルを追加します。 local-settings.xml . このファイルは、次のようなものです。

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
    <mirrors>
        <mirror>
            <id>my-repository-http-unblocker</id>
            <mirrorOf>my-blocked-http-repository</mirrorOf>
            <name></name>
            <url>http://........</url>
        </mirror>
    </mirrors>
</settings>

の中のどこが <mirrorOf> タグを指定する必要があります。 id のブロックされたリポジトリの <url> タグで、リポジトリの元のurlを再度指定します。ブロックされているすべてのリポジトリに対して、このアンブロッカーミラーを作成する必要があります。

で以下のようなHTTPリポジトリが定義されている場合、そのリポジトリにアクセスすることができます。 pom.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>

次に .mvn/local-settings.xml :

<mirrors>
    <mirror>
        <id>release-http-unblocker</id>
        <mirrorOf>central</mirrorOf>
        <name></name>
        <url>http://my-url/libs-release</url>
    </mirror>
    <mirror>
        <id>snapshot-http-unblocker</id>
        <mirrorOf>snapshots</mirrorOf>
        <name></name>
        <url>http://my-url/libs-snapshot</url>
    </mirror>
</mirrors>

私の仕事が、これにつまずいた他の人々の助けになることを願っています。しかし、もしもっとエレガントで優れた解決策をお持ちでしたら、ぜひ教えてください。