Maven依存関係が501エラーで失敗する


154

最近のMavenで実行中のビルドジョブジェンキンスは、彼らがからの依存関係を引くことができなかったことを言って、以下の例外を除いて失敗しているMavenの中央および使用する必要がありHTTPSを。リクエストをHTTPからHTTPSに変更する方法がわかりません。誰かがこの問題について私を案内してくれませんか?

[エラー]解決できないビルド拡張:
プラグインorg.apache.maven.wagon:wagon-ssh:2.1またはその依存関係の1つを解決できません
でしたorg.apache.maven.wagon:wagon-ssh:jar:2.1 ():の依存関係を収集 できませんでした:の
アーティファクト記述子を読み取れませんでしたorg.apache.maven.wagon:wagon-ssh:jar:2.1
アーティファクトorg.apache.maven.wagon:wagon-ssh:pom:2.1を中央(http://repo.maven.apache。 org / maven2):
ファイルの転送に失敗しました:http : //repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom
戻りコードは次のとおりです。501, ReasonPhrase:HTTPS Required. -> [Help 2]

Jenkinsdata[ERROR]
プラグインの収集を完了するのを待っているorg.apache.maven.plugins:maven-clean-plugin:2.4.1か、その依存関係の1つを解決 できませんでした:の
アーティファクト記述子を読み取れませんでしたorg.apache.maven.plugins:maven-clean-plugin:jar:2.4.1
アーティファクトorg.apache.maven.plugins:maven-clean-plugin:pom:2.4.1を中央から転送できませんでした(http://repo.maven.apache.org/maven2):に
失敗しました転送ファイル:http : //repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom
戻りコードは次のとおりです。501 , ReasonPhrase:HTTPS Required. -> [Help 1]


5
repo.maven.apache.org/maven2 urlを使用してmavenセントラルに接続していますが、代わりにrepo.maven.apache.org/maven2を使用してください。 つまり、https接続を使用してください
Manjunath HM

2
settings.xmlジェンキンスでmavenの中央URLを確認してください
varontron

こんにちはマンジュナート、私も同じ問題を抱えています。MavenにHTTPではなくHTTPSを使用するように強制する方法を知っていますか
Lahiru Madushanka

あなたの質問のための答えを得るよう@Lahiru Madushankaは、リンクを通過stackoverflow.com/questions/25393298/...
Manjunath HM

1
私はmavenバージョンを3.6.3に変更しましたが、それでも同じエラーが表示されます
dhS

回答:


129

観察されたエラーの理由は、セントラル501 HTTPSが必要で説明されています

2020年1月15日以降、中央リポジトリはプレーンHTTPを介した安全でない通信をサポートしなくなり、リポジトリへのすべてのリクエストをHTTPSを介して暗号化する必要があります。

最新バージョンのMaven(3.6.0、3.6.1で試した)は、デフォルトでHTTPS URLをすでに使用しているようです。

主なリポジトリが切り替わる日付は次のとおりです。

Javaビルドは1月13日から壊れる可能性があります(HTTPSへのリポジトリアクセスをまだ切り替えていない場合)

更新:Maven 3.2.3からのようですMaven CentralはHTTPS経由でアクセスされますhttps://stackoverflow.com/a/25411658/5820670を参照してください

Maven変更ログ(http://maven.apache.org/docs/3.2.3/release-notes.html


26
こんにちは!私はこの業界全体のイニシアチブを開始した最初の研究者です。重要な日付に関する私のブログ投稿もここにあります。medium.com
Jonathan Leitschuh

1
@JonathanLeitschuh ...に投票して受け入れられる完全な答えを書いてください
するThorbjörnRavnアンデルセン

1
Ubuntu 18.04でmaven 3.6.0を使用していますが、https urlを使用していないようです。
アシュトシュ

@Ashutosh:Ubuntu 19.10上のMaven 3.6.1でも同じことが起こります。なぜこれが当てはまるのかはわかりませんが、Ubuntuパッチの可能性がありますが、なぜそうするのでしょうか?)。これを解決するには、settings.xmlファイルを更新する以下の回答のいずれかを使用します(そして、パッチを当てたMavenを使用する以外に、これが正しい解決策であるため、それらに賛成投票してください)。
ギャス

だから、私は明示的にsettings.xmlHTTPSリポジトリを使用するように設定しました。これは、で可能ですが、wget非常に奇妙な理由でmvn archetype:generate -X(依存関係をダウンロードできるかどうかをテストするためだけ)、それでも印刷されてDownloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom ヘルプにアクセスしています。
Giorgi Tsiklauri

61

私も同じ問題に直面しています。私が試した2つの解決策があり、どちらもうまく動作します。

  • Mavenバージョンリポジトリを更新します(Mavenバージョン> = 3.2.3)
  • HTTPSリンクを使用するように現在のMavenバージョンを制限します。

Mavenバージョンリポジトリを更新します。

デフォルトのhttpsアドレスを含むApache Mavenバイナリをダウンロードします(Apache Maven 3.6.3バイナリ)。そして、NetBeansメニューバーのツール(Java Mavenダイアログビュー)でオプションダイアログウィンドウを開きます。そして、Mavenホームリストボックス(Mavenホームリストボックスビュー)で参照オプションを選択します。Apache Mavenの新規ダウンロードバージョン(更新されたMavenホームリストボックスビュー)を追加すると、プロジェクトが正常にビルドおよび実行されます。

現在のMavenバージョンがHTTPSリンクを使用するように制限します。

プロジェクトのpom.xmlに次のコードを含めます。

<project>
      ...
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    <repositories>
        <repository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

中央リポジトリはありましたが、中央プラグインリポジトリはありませんでした。それで解決しました。
ponder275

1
現在のMavenバージョンを制限してHTTPSリンクを使用する:私にとってはうまくいきました。
Mohammad Anas

私の場合、<pluginRepository>の部分を逃し、アーキタイプを使用すると、プラグインのデフォルトがhttpになるためエラーが発生しました。
user1708042

これで修正されましたが、「Received fatal alert:protocol_version」という別のエラーが発生し、誰かが同じ問題に遭遇した場合に備えて、java 8に切り替えて修正する必要がありました。
Kim Tang

賛成投票で同点を打ったことを嬉しく思います。この回答は、私が経験していた同様の問題に対処しました。
ブライアンリスク

36

2020年1月15日から、中央リポジトリはプレーンHTTPを介した安全でない通信をサポートしなくなり、リポジトリへのすべてのリクエストをHTTPSを介して暗号化する必要があります

このエラーが発生した場合は、Maven CentralへのすべてのURL参照を正規のHTTPS対応に置き換える必要があります。

ソース

プロジェクトのbuild.gradleに次の変更を加えました。

古い:

repositories {
   maven { url "http://repo.maven.apache.org/maven2" }
}

新着:

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}

はい、setting.xmlファイルを置き換えましたが、残念ながらまだ機能しません。私は正しいことをしていますか、それとも変更する必要がある他のファイルがありますか?
Sumeet Vishwas

@SumeetVishwasサンプルのsettings.xmlファイルを共有できますか?
Arunan Sugunakumar

3
@ArunanSugunakumar私はsettings.xmlを変更していません。POMで変更する必要があるすべて。Mavenの中央リポジトリを更新します。中央リポジトリのサンプルを回答スレッドに入れました。以下を見つけてください
Sumeet Vishwas

1
OPの質問は、「リクエストをHTTPからHTTPSに変更する方法がわからない」と述べています。この回答は質問には対応していません。
wchargin

28

任意のブラウザで以下のURLにアクセスしてみてください。501を返します

http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

httpsでお試しください。pom.xmlファイルをダウンロードします。

https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

それ(https://repo.maven.apache.org/maven2)をsetting.xmlファイルに追加してください:

<repositories>
   <repository>
      <id>Central Maven repository</id>
      <name>Central Maven repository https</name>
      <url>https://repo.maven.apache.org/maven2</url>
   </repository>
</repositories>

1
上記をファイルに追加しようとして失敗したため、完全なsetting.xmlの例を提供していただけますか?
jhertz

ファイル内の場所をより明確にするこの回答が見つかりました、現在は機能しています:stackoverflow.com/a/59784045/3120576
jhertz

22

Mavenの中央リポジトリを更新し、httpの代わりにhttpsを使用します

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

私はPomでこれを試しましたが、うまくいきました:<repositories> <repository> <id> central repo https </ id> <name> Central Repository Https </ name> <url> repo.maven.apache.org/maven2</ url > </ repository> </ repositories>。
LAM

1
ありがとう。これは、Netbeansを使用して、ubuntu 18.10で動作しています。MavenホームをNetbeansの最新のMavenバージョンに設定する必要がありました。このソリューションはどこで見つけましたか?
サナルS

プラグインリポジトリも更新する必要がある場合があります。修正するために、少なくともそれは私のためにも行われなければなりませんでした。
Kim Tang

16

DockerコンテナーにMaven / Javaのクリーンインストールを使用していました。

私にとっては、そこでファイルcd $M2_HOME/confを編集するsettings.xml必要がありました。内部に次のブロックを追加します<mirrors>...</mirrors>

<mirror>
  <id>central-secure</id>
  <url>https://repo.maven.apache.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>

Dockerfileを共有していただけませんか?同じ問題が発生しましたが、それを修正する方法がわかりません!
Han Van Pham

@HanVanPham mavenを最新バージョンに更新しました。このhttpの問題は修正されています。
mehulmpt

私にとっても、ローカルのsettings.xml($ HOME / .m2 / settings.xml)ファイルのcentral-secureブロックの適応は完全に機能しました。
t3az0r

13

古いバージョンのMaven(3.0.3および3.1)を使用していました。これらの古いバージョンは、httpリポジトリをサポートしていません(前述のとおり)。Maven 3.6へのアップグレードは私にとっての修正でした。


1
maven 3.2.3から、CentralはデフォルトでHTTPS経由でアクセスします maven.apache.org/docs/3.2.3/release-notes.html
farasath

12

MavenはHTTPSに移行し、HTTPアクセスを無効にしています

短い話ですが、2020年1月15日以降、Maven CentralリポジトリはHTTP接続をサポートしなくなりました(他のリポジトリも同様です)。したがって、HTTPS URLを使用するようにMaven / Gradle設定を指定します。

解決:

次の3つの方法のいずれかを選択できます。

  1. プロジェクトのpom.xmlファイルにリポジトリを追加する

    <project>
    ...
      <repositories>
        <repository>
          <id>central maven repo</id>
          <name>central maven repo https</name>
          <url>https://repo.maven.apache.org/maven2</url>
        </repository>
      </repositories>
    </project>
  2. リポジトリをsettings.xmlファイルのプロファイルに追加します。

    <profile>
      <id>my profile</id>
      <repositories>
        <repository>
          <id>central maven repo</id>
          <name>central maven repo https</name>
          <url>https://repo.maven.apache.org/maven2</url>
          </repository>
      </repositories>
    </profile>
  3. Mavenバージョンを、https値をデフォルトとして使用する新しいバージョンに更新します。現時点で最新のもの3.6.3 ダウンロードはこちら

Gradleの場合:

HTTPSバージョンのURLのみを置き換えます。

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}

アップグレードする(3.3.9から3.6.3)には、最初に古いバージョンを完全にアンインストールする必要がありますか?または、最新バージョンをインストールしますか?
BigRedEO

1
@BigRedEOご使用の環境で複数のMavenバージョンを使用できます。ただし、あなた$M2_HOMEまたはあなたの$PATH env変数は、それらの1つだけを指します。これは、デフォルトのMavenバージョンになります。新しいものをインストールする前に、古いものをアンインストールしたいと思います。しかし、それはあなたのニーズに依存します。
アダムM.ガンボアG.

10

次のコードセグメントをsetting.xmlに追加し、問題を解決しました、

<mirrors>
    <mirror>
        <id>maven-mirror</id>
        <name>Maven Mirror</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

9

同じ問題がありますが、Jenkinsの代わりにGitLabを使用しています。問題を克服するために私がしなければならなかったステップ:

  1. 私のプロジェクトはGitLabにあるため、継続的インテグレーションを実行する必要があるDockerイメージを指す.ymlファイルを使用し、使用するイメージにはhttp:// maven URLがあります。そこで、それをhttps:// mavenに変更しました。
  2. 同じDockerfileイメージに古いバージョンのMaven 3.0.1があり、一晩で問題が発生しました。Dockerfileを更新して最新バージョン3.6.3を取得しました
  3. 次に、そのイメージをオンラインリポジトリにデプロイし、その新しいイメージを使用するようにMavenプロジェクトymlfileを更新しました。
  4. そして最後に、http:// mavenではなくhttps:// maven ...を参照するようにメインプロジェクトのPOMファイルを更新しました

私はそれが私のセットアップに固有のものであることを理解しています。しかし、上記のすべての手順を実行しなくても、このエラーメッセージは引き続き表示されます。 Return code is: 501 , ReasonPhrase:HTTPS Required


Dockerfileを共有していただけませんか?
Han Van Pham

8

他の回答で述べたように、Mavenの古いバージョンではhttpを使用する一方で、Maven Centralへのリクエストにはhttpsが必要になりました。

Maven 3.2.3以降にアップグレードしたくない、またはアップグレードできない場合は、次のコードをMAVEN_HOME \ conf \ settings.xml<profiles>セクションに追加することで回避策を実行できます。

<profile>
    <id>maven-https</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories> 
</profile>

これは、必要に応じてPOMで無効化/上書きしない限り、常にアクティブな設定になります。


7

すべての企業コーダーにとって、理想的には、このエラーが発生した場合、それはコードベースがまだオープンソースコミュニティから構築されていることを意味します。社内のMavenリポジトリマネージャーで「中央」リポジトリを上書きする必要があります。

settings.xmlに移動して、中央リポジトリのURLをhttp://からhttps://に上書きできます。

<M2_HOME>/conf/settings.xml

ミラーセクションを見つけて、次のエントリを追加します。

    <mirror>
     <id>other-mirror</id>
     <name>Other Mirror Repository</name>
     <url>https://other-mirror.repo.other-company.com/maven2</url>
     <mirrorOf>central</mirrorOf>
    </mirror>

URL]セクションで、使用していた場合のいずれかhttp://repo1.maven.org/maven2/またはhttp://repo.maven.apache.org/maven2/その後、

http://repo1.maven.org/maven2/https://repo1.maven.org/maven2/に置き換えます

http://repo.maven.apache.org/maven2/https://repo.maven.apache.org/maven2/に置き換えます

ここでは、理想的には会社のソース管理/リポジトリURLを使用する必要があります。これにより、オープンソースのMavenリポジトリコミュニティとの連絡がすべてブロックされます。

他の回答で述べたように、2020年1月15日から、中央のMavenリポジトリはプレーンHTTPを介した安全でない通信をサポートしません。


ミラーセクションにミラーを追加した後、エラーが発生しました。そのピアは認証されていません。私は今どうすればいい?ありがとう!
dimson

@dimsonこれは、httpsに接続しようとしたが、おそらくJavaに証明書がないために、認証用の証明書が欠落していたことを意味します。証明書をリポジトリからJavaキーストアにインポートするか、Javaをアップグレードします。
tibortru

@tibortru Thanx Man、すでに問題を解決しています。IDEでこれらのプロパティをmavenに追加しました:maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https。 protocol = TLSv1、TLSv1.1、TLSv1.2。その後はすべて正常に動作します。
dimson

ええ、それは逆です。安全でないもの:)
tibortru

7

私(コーポレートコーダー)も、settings.xml修正された問題にミラーリポジトリを追加しました。また、Dockerコンテナー内でMavenを使用しています。

<mirrors>
    <mirror>
        <id>https-mirror</id>
        <name>Https Mirror Repository</name>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

settings.xmlファイル、@ Oscarがどこにあるか教えていただけますか?
Han Van Pham

承知しました!Dockerfileでは、まず次のように一時フォルダーに配置します:echo "<settings> <mirrors> .... </ mirrors> </ settings>"> /tmp/maven-settings.xml。次に、「-s」オプションを使用してmavenを実行し、「mvn -s /tmp/maven-settings.xml clean」のように設定ファイルへのパスを渡します。それが役に立てば幸い!
Oscar Drai

@ han-van-phamは$ HOME / .m2 /にあります。そうでない場合は、そこで作成します。
dr0i

4

Ubuntu 16.04、java 1.8.0_201を使用。

古いmavenをアンインストールし、Maven 3.6.3をインストールしましたが、Mavenの依存関係が501エラーで失敗するというこのエラーが発生します。

httpsの要求に関連するトラストストア/キーストアの問題である可能性があることに気付きました。jvm.configファイルを使用して-Djavaxオプションを設定できるようになりました。https://maven.apache.org/configure.htmlを参照してください

私はTomcatも使用しているので、キーストアとトラストストアの設定をTomcat(setenv.sh)からjvm.configにコピーすると、うまくいきました!

この構成を 'export MAVEN_OPTS'で渡すオプションもあります(mvn generateを使用する場合)が、これにより501エラーは停止しましたが、別のエラーが発生しました:pomファイルが予期されていました。

個別のjvm.configファイルの作成は完全に機能します。プロジェクトのルートに配置するだけです。

うまくいけば、これが誰かを助けて、一日中それを理解するのにかかりました!


4

jcenterでも同じ問題が発生しています

2020年1月13日以降、JcenterはHTTPSでのみ使用できます。

同じことを使用して依存関係を取得するプロジェクトは、問題に直面し始めます。すばやく修正するには、build.gradleで次のようにします。

の代わりに

repositories {
jcenter ()
//others
}

これを使って:

repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}

4

エラー:

ファイルの転送に失敗しました:http : //repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

戻りコードは501で、ReasonPhrase:HTTPSが必要です。

根本原因分析:

Maven Centralはクライアントがhttpsを使用することを期待していますが、クライアントはプレーンなHTTPリクエストのみを作成しています。

したがって、「wagon-ssh-2.1.pom」という名前のパッケージをダウンロードする要求は失敗しました。

問題を解決するには?

URLを置き換えます " http://repo.maven.apache.org/maven2 "を

https://repo.maven.apache.org/maven2

プロジェクトのpom.xmlファイルまたはbuild.gradleファイル内。


2
このURLはどこで置き換えますか
dhS

3

誰かがそれを必要とする場合に備えてこれを共有する:

古いGradle構成(Gitlabなし、Dockerデプロイメント、単純なプロジェクト用)

repositories {
google()
jcenter()

maven { url "http://dl.bintray.com/davideas/maven" }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'http://repo1.maven.org/maven2' }
maven { url 'http://jcenter.bintray.com' }
}

新しい設定:

repositories {
google()
jcenter()

maven { url "https://dl.bintray.com/davideas/maven" }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'https://repo1.maven.org/maven2' }
maven { url 'https://jcenter.bintray.com' }
}

httpsに注意してください。ハッピーコーディング:)


3

私の現在の環境はHTTPSをサポートしていないため、安全でないバージョンのリポジトリを追加すると問題が解決しました:http : //insecure.repo1.maven.orgSonatypeによる)

    <repositories>
       <repository>
          <id>Central Maven repository</id>
          <name>Central Maven repository insecure</name>
          <url>http://insecure.repo1.maven.org</url>
       </repository>
    </repositories>

-3

次のリポジトリをpom.xmlに追加します。

<project>
...
    <repositories>
        <repository>
            <id>central</id>
            <name>Maven Plugin Repository</name>
            <url>https://repo1.maven.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
...
</project>

使用しているため、同じ問題が発生しますhttp
Yudhistira Arya

1
私はPomでこれを試してみましたが、機能しています
1

私も試してx2を試しました
Javier J Solis Flores
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.