プロキシ経由でMavenを使用するにはどうすればよいですか?


130

プロキシを介してMavenを使用した経験を共有したいと思います。

ほとんどの場合、次のような例外やメッセージに直面します。

「org.apache.maven.plugins」のリポジトリメタデータを取得できませんでした 
リポジトリ:エラーによる中央:ファイルの転送エラー:接続が拒否されました:接続

または

[警告] org.apache.maven.plugins:maven-clean-のプラグイン記述子を取得できませんでした
plugin:2.5:プラグインorg.apache.maven.plugins:maven-clean-plugin:2.5またはそのいずれか 
依存関係を解決できませんでした:のアーティファクト記述子の読み取りに失敗しました 
org.apache.maven.plugins:maven-clean-plugin:jar:2.5

プロキシサーバーを使用するようにMavenを設定するにはどうすればよいですか?


(誰でも)これを実際の質問に言い換える(たとえば、プロキシ経由でMavenを使用するにはどうすればよいですか?)?その後、.. StackOverflowの形式でより多くのインラインように、答えとしてあなたの質問本体を投稿できる
ティム・

ボグダンのために言い換えました。もし望むなら、元のコンテンツを答えとして投稿してください
リッチセラー

同時に編集したようです
リッチセラー

回答:


145

Mavenのプロキシ設定の詳細については、ミニガイドをご覧ください。

基本的に、グローバル設定([maven install]/conf/settings.xml)またはユーザー設定(${user.home}/.m2/settings.xml)のプロキシセクションが正しく構成されていることを確認する必要があります。ユーザー設定でこれを行うことをお勧めします。これは、パスワードをプレーンテキストで公共の場所に保存しないようにするためです。

Maven 2.1ではパスワードの暗号化が導入されましたが、暗号化がプロキシ設定とリポジトリのパスワードに適用されるかどうかを確認する余裕がありません(なぜそうならないのかわかりません)。

詳しくは、settings.xmlにコメントアウトされたプロキシ設定とその変更方法の説明があります。

ミニガイドの設定は次のようになります。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                  http://maven.apache.org/xsd/settings-1.0.0.xsd">
[...]
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
    </proxy>
  </proxies>
[...]
</settings>

ありがとうございます。しかし、この投稿は質問ではなく、他の人にとってのヒントです。私はすでにこの問題を解決しましたが、自明ではないことに多くの時間を費やしました。誰かに役立つように投稿しました。
ボグダン

7
m2ディレクトリにsetting.xmlファイルが見つかりません。なぜか?@リッチセラー
Ariox66、2015

5
そこに配置する必要があります。maven_home(mavenバイナリを解凍した場所)からサンプルのsettings.xmlを見つけることができます。
Ravi

また、プロキシが認証を必要としない場合は、<username>および<password>要素を削除する必要があります(空のコンテンツを指定しないでください)。これを理解するには少し時間がかかりました。
dmcontador

50

ソックスプロキシを使用する方法?

どこかにサーバーへのSSHトンネルを設定します。

ssh -D $PORT $USER@$SERVER

Linux(bash):

export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

ウィンドウズ:

set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

2
MAVEN_OPTSMavenにHTTPS経由でダウンロードさせる唯一の方法は、socksプロキシを使用することです。いずれかを介して、HTTPまたはHTTPSプロキシを使用して、MAVEN_OPTSまたはsettings.xmlもたらす、org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
ミハイCapotă

以下のためのhttpプロキシ:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
オミド

ありがとう、ありがとう。これらのオプションを1つのコマンドに対して1回だけ使用する場合は、MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install次のmvnように入力できます。同じセッション内の次のコマンドは、プロキシなしになります。
Eric Duminil

29

私もこの問題を抱えていsettings.xmlたので、.m2フォルダ内のファイルを編集して解決しました。私settings.xmlは今のようです:

<settings>
  <proxies>
    <proxy>
      <id>genproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxyHost</host>
      <port>3128</port>
      <username>username</username>
      <password>password</password>
    </proxy>
 </proxies>
</settings>

1
私の場合、これはjarファイルをダウンロードしていません。私はすべてを試しました
Faizan Mubasher

28

また、一部のプラグイン(リモートリソースが思い浮かぶ)は、MAVEN_OPTSを介したプロキシ構成のみを受け入れる非常に古いライブラリを使用することにも注意してください。

-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>

あなたはこれのためにauthで立ち往生しているかもしれません。


Ubuntuリポジトリのmaven 3.0.5がインストールされたUbuntu 14.04では、私にはうまくいきませんでした。settings.xmlファイルでのプロキシの設定は機能しました。
MihaiCapotă2015

1
Ubuntu 14.04でMaven 3.0.4を使用して動作しました
rmv '30

この方法でMAVEN_OPTSを設定する必要がある例は、Mavenを使用してソースからMavenをビルドすることです。MAVEN_OPTSがないと、多くのJARをダウンロードしますが、LICENSE-2.0のダウンロードに失敗します。
Permaquid 2017年

@krosenvoldありがとう、この解決策は私にとってうまくいきました。私はすでにsettings.xmlでプロキシを設定していましたが、失敗したwsdlからコードを生成したいcxfプラグインがありました。これで問題が解決しました。
Vishal Vijayan

23

Mavenプロキシを設定するには

〜/ .m2 / settings.xmlファイルでプロキシセッションを編集します。ファイルが見つからない場合は作成してください。

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>

</proxies>
</settings>

または

{M2_HOME} /conf/settings.xmlでプロキシセッションを編集します

それが役に立てば幸い.. :)


15

これらの原因として最も可能性が高いのは2つの問題です。

  1. settings.xmlにプロキシ設定を追加する必要があります。これがユーザー名フィールドのトリックです。domain \ usernameのようになっていることを確認してください。そこにドメインを設定し、この正確なスラッシュを配置することが重要です '\'。パスワードにxmlに適さない文字が含まれている場合は、<![CDATA []]>タグを使用できます。
  2. Maven 2.2.0がプロキシを介してまったく動作しない場合があることに気づきました。2.2.1は完全に問題なく動作します。

それらのいくつかが省略されている場合-mavenはランダムなエラーメッセージで失敗する可能性があります。

私がそうであったように、私がこの問題を6時間グーグルすることから誰かを救ったことを願っています。


NTLMプロキシを使用していますか?ミニガイドから:「NTLMプロキシはテストされていないため、現在サポートされていません。JDK1.4+で関連するシステムプロパティを使用してこれを機能させることができる場合があります。」
リッチセラー

わからない これは実際に私から600マイル離れたところにある企業プロキシであり、システム管理者の誰も今週末オフィスにいません。だから今は誰にも聞けない 調べるのは面白いでしょう。私はそれがhttp、靴下、その他のプロトコルをサポートしていることを知っています。NTMLかもしれません。
ボグダン

14

これに関する私の経験を追加するだけですhttp://webproxy.intra.companyname.com:3128。私の会社のプロキシは です。Mavenがこのプロキシ経由で機能するためは、設定はこのようにする必要があります

<settings>
  <proxies>
    <proxy>
      <id>default</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>webproxy.intra.companyname.com</host>
      <port>3128</port>
    </proxy>
  </proxies>
</settings>

他の一部のプロキシ構成ファイルとは異なり、protocolここでは、プロキシサーバーに接続する方法について説明します。プロキシする必要があるプロトコルの種類については説明しません。httpターゲットの一部はホスト名から分離する必要があります。そうしないと機能しません。


現時点で私はちょうど反対を実験しました。ここでのプロトコルは、このプロキシを使用するプロトコルを説明するためのものです。<protocol> https </ protocol>を使用してhttpプロキシに接続するhttpsプロトコルプロキシを構成することを達成しました
Olivier Amblet

ありがとうございました!これは私のために働いた!「http://」が前に付いていて失敗しました
ジェシーマッコール

11

@krosenvoldに感謝します。

設定ファイルの変更が機能しない場合は、POMファイルがあるコマンドプロンプトでこれを試してください。

mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080

これは、パスワードを変更した直後に役立ちました。


11

私はcntlmローカルで実行NTLMv2し、企業のプロキシで認証するためのパスワードハッシュで構成されており、

export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"

からそのプロキシを使用しmavenます。もちろん、使用するプロキシはcntlm/ をサポートする必要がありますNTLMv2


`set MAVEN_OPTS = -DproxyHost = 127.0.0.1 -DproxyPort = 3128` for windows
qxo

:PowerShellは、システム環境変数を設定することができます [Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
Boggin

6

このトピックに追加するために、以下に私の体験を示します...本当に奇妙で時間がかかるので、追加する価値があると思いました。

Windowsでポートレットブリッジを構築しようとして同様の問題が発生し、次のエラーが発生しました。

ダウンロード:http://repo1.maven.org/maven2/org/apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
[デバッグ]解像度追跡ファイルC:\ Documents and Settings \ myuser \ .m2 \ repository \ org \ apache \ portals \ bridges-pom \ 1.0 \ bridges-pom-1.0.pom.lastUpdatedの読み取り
[デバッグ]解決追跡ファイルC:\ Documents and Settings \ myuser \ .m2 \ repository \ org \ apache \ portals \ bridges-pom \ 1.0 \ bridges-pom-1.0.pom.lastUpdatedを書き込んでいます
[エラー]ビルドは1つのプロジェクトを読み取ることができませんでした-> [ヘルプ1]
org.apache.maven.project.ProjectBuildingException:POMの処理中にいくつかの問題が発生しました:
[致命的]解決できない親POM:アーティファクトを転送できませんでした
org.apache.portals:bridges-pom:pom:1.0 from / to central(http://repo1.maven.org/maven2):ファイルの転送中にエラーが発生しました:repo1.maven.orgおよび 'parent.relativePath'が間違ったローカルをポイントしています
POM @行23、列11
...
[エラー]プロジェクトorg.apache.portals.bridges:portals-bridges-common:2.0(H:\ path_to_project \ portals-bridges-common-2.0 \ pom.xml)に1つのエラーがあります
[エラー]解決できない親POM:アーティファクトorg.apache.portals:bridges-pom:pom:1.0を中央から転送できませんでした(http://repo1.maven.org/maven2):
ファイルの転送エラー:repo1.maven.orgおよび 'parent.relativePath'が誤ったローカルPOM @行23、列11を指しています:不明なホストrepo1.maven.org-> [ヘルプ2]
...
[エラー]エラーと考えられる解決策の詳細については、次の記事をご覧ください。
[エラー] [ヘルプ1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[エラー] [ヘルプ2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

少しサーフィンをした後、私はいくつかのことを試しました:

  • mavenが親がローカルであるとは思わないように、parent.relativePathを空に設定しようとしました。これは、HudsonビルドでのSOに関する提案の失敗によるものです。解決できない親POMこのナブルフォーラムです。これは効果がありませんでした。

  • リポジトリがsettings.xmlに明示的にリストされていることを確認しようとしましたが、これも効果がありませんでした。

  • 次に、Sarthonによるこのブログで説明されているように、mvnがリポジトリ自体の履歴に依存するのではなく、リポジトリをルックアップするように強制されたことを確認しました。残念ながら、これも問題ではありませんでした。

  • 必死になってから、私はMAVEN_OPTSに再度アクセスして、プロキシ設定に違反していないことを確認しました。値は引用符で囲まれていませんが、これらは正しいものでした。

    set MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m

  • それで、最後に、プロキシ構成を私のsettings.xmlに移動し、これはうまくいきました:

    <proxies>
      <proxy>
        <id>genproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <!--username>proxyuser</username-->
        <!--password>proxypass</password-->
        <host>myproxy.mycompany.com</host>
        <port>8080</port>
        <nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts>
      </proxy>
    </proxies>

元のMAVEN_OPTSが機能しなかった理由(引用符)が、settings.xml構成が機能していたのに本当にわからない。修正を元に戻し、各ステップをもう一度確認したいのですが、時間の無駄が多すぎます。いつでも報告します。


実際にMAVEN_OPTSでもユーザー名とパスワードを指定しましたか?
bcmoney

1
私はそうは思わなかったが、それから私は私のプロキシサーバーのために必要はありません。ご覧のとおり、それは可能です。セキュリティの問題は別として、あなたはそれを試すことができます。ここまで来ても問題が解決しないのですか?
wmorrison365

4

これは実際には質問に対する回答ではありませんが、この投稿を検索している人にとっては知っておく価値があるかもしれません。nexusのようなMavenリポジトリプロキシをインストールすることもできます。

MavenはローカルのNexusプロキシに接続するように構成され、Nexusはアーティファクトを取得(およびキャッシュ)します。Webインターフェイスを介して構成でき、(http)プロキシをサポートしています)。

アーティファクトはローカルで利用でき、高速でダウンロードできるため、これは特に会社の環境では利点となります。外部のMavenリポジトリの可用性に依存する必要がなくなります。

質問にリンクを戻すには、Nexusでは、プロキシ設定に便利なGUIがあり、すべての開発者ではなく、1か所で実行する必要があります。


3

あなたが最初にあなたのホームフォルダの天候に行くとチェック私の場合はMavenのためのプロキシ設定に新しいしている場合があり.m2、フォルダは、その中に名前のファイルがあるはずsettings.xml、それを作成し、これと変更を貼り付けていない場合hostport、その後、必要な変更した場合nonProxyHosts

ホームフォルダー-C:\ Users \ {UserName}

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>

</proxies>
</settings>

いずれにせよこれが成功しない場合は、ホームフォルダのこの場所で変更を行ってください。

/conf/settings.xml

私はIDEとしてEclipseを使用してい
ます。これが役立つことを願っています!!

注:プロキシを削除するにはsettings.xml、他の場所に移動します


プロキシを削除するには、settings.xmlを別の場所に移動します
Akitha_MJ

1

Mavenがプロキシを介しJAVA_TOOL_OPTIONSて機能しても、呼び出しているプラ​​グインの一部が機能しない場合は、設定を使用して-Dhttp*.proxy*設定も試してください。

あなたが既に持っている場合JAVA_OPTSだけ行います

export JAVA_TOOL_OPTIONS=$JAVA_OPTS

0

上記の手法を除いて、多少の努力でjproxyloaderライブラリを使用してプロキシ経由でmavenを実行できます(これを行う方法のページに例があります:http ://jproxyloader.sourceforge.net/ )。これにより、成果物をダウンロードするためにのみsocksプロキシーをセットアップできます。

duanniが言及した解決策(設定-DsocksProxyHost)には1つの問題があります。ローカルデータベースに対して統合テストを実行している場合(またはプロキシを経由しないURLに接続する別のテスト)。データベースへの接続もプロキシに送信されるため、これらのテストは機能しなくなります。jProxyLoaderを使用して、ネクサスホスト専用のプロキシを設定できます。さらに、必要に応じて、別のプロキシを介してデータベースへの接続を渡すことができます。


0

他の<proxy></proxy>タグを追加し、プロトコルタグでhttpsを指定する必要がある場合があります。<protocol>https</protocol>


0

上記の投稿は私の問題の解決に役立ちました。上記に加えて、私はそれを機能させるために以下の変更を行わなければなりませんでした:

  • システムプロキシ設定を使用するようにMavenのJREネット設定(\ jre \ lib \ net.properties)を変更しました。

    https.proxyHost=proxy DNS
    https.proxyPort=proxy port
  • settings.xmlに含まれるプロキシサーバーの設定。NTLM認証を使用するためのユーザー名とパスワードの設定は提供していません。


0

Mavenは、settings.xmlと呼ばれるファイルを介してこれを行う組み込みの方法を提供します。これは他の回答で説明されています。ただし、特にLinuxでは、コマンドラインツールが環境変数で指定されたプロキシhttps_proxyを自動的に使用するのが一般的です

自分自身を繰り返さないという原則(間違いを回避するのに役立つことを目的としています)に従うには、それmvnも自動的に処理できると便利です。

必要な変換を行うシェルスクリプトを次に示します。

#! /usr/bin/env bash

function javaproxy {
    ## using "Shell Parameter Expansion"
    request_scheme=$1 ; proxy=$2
    notscheme=$(echo ${proxy#*://}) ## parse
    scheme=$(echo ${proxy%${notscheme}}) ## remove
    scheme=$(echo ${scheme%://}) ## strip
    hostport=$(echo ${proxy#*//*}) ## parse
    host=$(echo ${hostport%:*}) ## parse
    port=$(echo ${hostport#${host}}) ## remove
    port=$(echo ${port#:}) ## strip
    scheme=$(echo ${scheme:-http}) ## default
    host=$(echo ${host:-localhost}) ## default
    port=$(echo ${port:-8080}) ## default
    echo -n " -D${request_scheme}.proxyHost=${host}"
    echo -n " -D${request_scheme}.proxyPort=${port}"
}

JTO=""

if [ $http_proxy ] ; then
    JTO="${JTO}$(javaproxy http ${http_proxy})"
fi

if [ $https_proxy ] ; then
    JTO="${JTO}$(javaproxy https ${https_proxy})"
fi

if [ $no_proxy ] ; then
    JTO="${JTO} -Dhttp.nonProxyHosts=$(echo \"${no_proxy}\"|tr ',' '|')"
fi

   export JAVA_TOOL_OPTIONS=${JTO}
   echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"

   mvn_friendliness_options+=--update-snapshots
   mvn ${mvn_friendliness_options} $@

これに次のような名前を付けてproxied_mvn実行します。

$ https_proxy=http://localhost:58080 ./proxied_mvn clean package

または、環境設定を起動スクリプトに移動することもできます。

落とし穴

プロキシ経由でNexusにアクセスできるようにMavenを設定しようとすると、うまくいかないことがたくさんあります。うまくいけば、このスクリプトは最も厄介な問題のいくつかを解決するのに役立ちますが、他の問題は残ります。

  • Nexusクレデンシャルが利用可能で正しい(必要な場合のみ)

    確認する mvn help:effective-settings

  • Mavenキャッシング:「解決は再試行されません」

    mvn clean package --update-snapshots

  • Mavenのテキストの壁の出力-エラーメッセージが実行間で微妙に異なっていないことを確認するには、出力を注意深く調べる必要があります

  • 古いバージョンのJava _JAVA_OPTIONSでは、の代わりにが必要になる場合がありJAVA_TOOL_OPTIONSます。

エピローグ

プロキシには複数の種類があります。これに対応して、この質問が解釈された方法は複数あります。ここでは、さまざまな異なる答えが多数寄せられています。

(フォワードHTTP / HTTPS)Webプロキシサーバーのケースに明示的に対処しました。これは、会社のネットワーク(一部の会社の場合)内からインターネットにアクセスするために使用されます。これは、SOCKSプロキシとは明らかに異なる場合があります。SOCKSプロキシは、ここでのいくつかの回答でも取り上げられています。

ところで、JAVA_TOOL_OPTIONSこのソリューションはを使用しているため、プロキシ内で他のJavaアプリケーション実行する場合にも適用できます。


パーティングヒント...上記の例ではを使用していhttp://localhost:58080ます。これは、リモートアクセスクライアントでWSLCLIENT_PROXY=localhost:58080使用して実行することにより、自分から実際のネットワークプロキシへのポート転送を設定したためです。

ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.