web-dev-qa-db-ja.com

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

プロキシ経由でmavenを使用した経験を共有したいと思います。

次のような例外とメッセージに直面する可能性が最も高くなります。

リポジトリメタデータ:「org.Apache.maven.plugins」を
 repository:centralから取得できませんでした:エラーのためファイルを転送中:エラー:接続が拒否されました:connect 

または

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

プロキシサーバーを使用するようにMavenを構成する方法

115
Bogdan

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

  1. Settings.xmlにプロキシ構成を追加する必要があります。ユーザー名フィールドのコツです。 domain\usernameのように見えることを確認します。そこにドメインを設定し、この正確なスラッシュを置くことは重要な「\」です。パスワードにXMLに対応していない文字が含まれている場合は、<![CDATA []]>タグを使用できます。
  2. 私は、maven 2.2.0がプロキシを介してまったく動作しないことがあり、2.2.1が完全に正常に動作することに気付きました。

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

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

14
Bogdan

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>
138
Rich Seller

ソックスプロキシの使用方法

どこかにあるサーバーへのSSHトンネルをセットアップします。

ssh -D $PORT $USER@$SERVER

Linux(bash):

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

Windows:

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

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

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

あなたはこれのために認証に行き詰まっているかもしれません。

25
krosenvold

この問題もありました。m2フォルダーのsettings.xmlファイルを編集して解決しました。私の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>
24
pedrobisp

Maven Proxyを設定するには:

〜/ .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でプロキシセッションを編集します

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

21
Sarat Chandra

これに関する私自身の経験を追加するために、私の会社のプロキシはhttp://webproxy.intra.companyname.com:3128です。 Mavenがこのプロキシを介して機能するには、設定がexactlyのようになっている必要があります

<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部分は、ホスト名から分割する必要があります。そうしないと機能しません。

14
Andy Jones

@krosenvoldに感謝します。

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

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

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

10
user1189363

cntlm localyを実行し、NTLMv2パスワードハッシュで構成して、企業プロキシで認証し、使用します

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

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

6
Peter Hofman

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

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

ダウンロード:http://repo1.maven.org/maven2/org/Apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
[DEBUG]解像度追跡ファイルの読み取りC:\ Documents and Settings\myuser\.m2\repository\org\Apache\portals\bridges-pom\1.0\bridges-pom-1.0.pom.lastUpdated 
 [DEBUG]解像度追跡ファイルの作成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の処理中にいくつかの問題が発生しました:
[FATAL]解決できない親POM:アーティファクトを転送できませんでした
 org.Apache.portals:bridges-pom:pom:1.0 from/to central(http://repo1.maven.org/maven2):ファイルの転送エラー:repo1.maven.orgおよび'parent.relativePath'は間違ったlocal 
 POM @ line 23、column 11
 ... 
 [ERROR]プロジェクト組織を指します。 Apache.portals.bridges:portals-bridges-com mon:2.0(H:\ path_to_project\portals-bridges-common-2.0\pom.xml)には1つのエラーがあります
 [エラー]解決できない親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を指している:不明なホスト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 build fail:Non-resolvable parent POM および このnabbleフォーラム でのSOの提案によるものです。これは効果がありませんでした。

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

  • その後、 このブログのSarthonによる で説明されているように、mvnがリポジトリの履歴に依存するのではなく、リポジトリの検索を強制されるようにしました。残念ながら、これも問題ではありませんでした。

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

    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>

Settings.xml configが機能したのに、元のMAVEN_OPTSが機能しなかった理由(クォート?)が本当にわかりません。修正を元に戻し、各ステップを再度確認したいのですが、時間を無駄に使いすぎています。いつまでに報告します。

6
wmorrison365

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

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

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

質問に戻ってリンクするには; Nexusでは、プロキシ設定用の素敵なGUIがあり、すべての開発者ではなく、1か所でのみ行う必要があります。

4
extraneon

Mavenがプロキシを介して動作し、呼び出しているプラ​​グインの一部を動作しない場合は、Java_TOOL_OPTIONS設定で-Dhttp*.proxy*も設定してみてください。

すでにJava_OPTSをお持ちの場合

export Java_TOOL_OPTIONS=$Java_OPTS
1
auselen

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を使用しています
これが役立つことを願っています!!

1
Akitha_MJ

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

0
Pepe

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

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

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

0
siachen345

上記の手法を除き、多少の努力を払って、jproxyloaderライブラリを使用してプロキシ経由でmavenを実行できます(これを行う方法のページに例があります: http://jproxyloader.sourceforge.net/ )。これにより、アーティファクトをダウンロードするためにのみソックスプロキシを設定できます。

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

0
walkeros