プロキシ経由で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を構成する方法
これらの原因として最も可能性が高いのは、次の2つの問題です。
それらのいくつかが省略された場合-mavenはランダムなエラーメッセージで失敗する可能性があります。
私がしたように、誰かがこの問題を6時間グーグルで移動することから救ったことを願っています。
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>
どこかにあるサーバーへの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"
また、一部のプラグイン(リモートリソースが思い浮かぶ)は、MAVEN_OPTSを介してのみプロキシ設定を受け入れる本当に古いライブラリを使用することに注意してください。
-Dhttp.proxyHost=<Host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<Host> -Dhttps.proxyPort=<port>
あなたはこれのために認証に行き詰まっているかもしれません。
この問題もありました。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>
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でプロキシセッションを編集します
それが役に立てば幸い.. :)
これに関する私自身の経験を追加するために、私の会社のプロキシは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
部分は、ホスト名から分割する必要があります。そうしないと機能しません。
@krosenvoldに感謝します。
設定ファイルの変更が機能しない場合は、POMファイルのあるコマンドプロンプトでこれを試してください。
mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080
これは、パスワードを変更した直後に役立ちました。
cntlm
localyを実行し、NTLMv2
パスワードハッシュで構成して、企業プロキシで認証し、使用します
export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"
maven
からそのプロキシを使用します。もちろん、使用するプロキシはcntlm
/NTLMv2
をサポートする必要があります。
そして、このトピックに追加するために、以下に私の経験があります...本当に奇妙で時間がかかるので、追加する価値があると思いました。
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が機能しなかった理由(クォート?)が本当にわかりません。修正を元に戻し、各ステップを再度確認したいのですが、時間を無駄に使いすぎています。いつまでに報告します。
これは実際には質問に対する答えではないことは知っていますが、この投稿を検索する人にとっては知っておく価値があるかもしれません。 nexus のようなMavenリポジトリプロキシをインストールすることもできます。
MavenはローカルNexusプロキシに接続するように構成され、Nexusはアーティファクトを取得(およびキャッシュ)します。 Webインターフェースを介して構成でき、(http)プロキシをサポートしています)。
これは、特に会社の設定では、アーティファクトがローカルで利用でき、高速でダウンロードできるため、外部Mavenリポジトリの可用性に依存しなくなるため、利点となります。
質問に戻ってリンクするには; Nexusでは、プロキシ設定用の素敵なGUIがあり、すべての開発者ではなく、1か所でのみ行う必要があります。
Mavenがプロキシを介して動作し、呼び出しているプラグインの一部を動作しない場合は、Java_TOOL_OPTIONS
設定で-Dhttp*.proxy*
も設定してみてください。
すでにJava_OPTS
をお持ちの場合
export Java_TOOL_OPTIONS=$Java_OPTS
mavenのプロキシ設定が初めての場合私の場合、最初に.m2
フォルダーがあり、その中にsettings.xml
という名前のファイルがあるはずです。 Host
とport
を変更し、必要に応じて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を使用しています
これが役立つことを願っています!!
他の<proxy></proxy>
タグを追加し、プロトコルタグでhttpsを指定する必要がある場合があります:<protocol>https</protocol>
上記の投稿は私の問題の解決に役立ちました。上記に加えて、私はそれを機能させるために以下の変更を行わなければなりませんでした:
MavenのJREネット設定(\ jre\lib\net.properties)がシステムプロキシ設定を使用するように変更されました。
https.proxyHost=proxy DNS
https.proxyPort=proxy port
Settings.xmlにプロキシサーバー設定が含まれています。 NTLM認証を使用するためのユーザー名とパスワードの設定は提供しませんでした。
上記の手法を除き、多少の努力を払って、jproxyloaderライブラリを使用してプロキシ経由でmavenを実行できます(これを行う方法のページに例があります: http://jproxyloader.sourceforge.net/ )。これにより、アーティファクトをダウンロードするためにのみソックスプロキシを設定できます。
Duanniが言及したソリューション(-DsocksProxyHostを設定)には、1つの問題があります。ローカルデータベースに対して統合テストを実行している場合(または、プロキシ経由ではいけないURLに接続する別のテスト)。データベースへの接続もプロキシに向けられるため、これらのテストは機能しなくなります。 jProxyLoaderを使用すると、ネクサスホストに対してのみプロキシを設定できます。さらに、必要に応じて、別のプロキシを介してデータベースに接続を渡すことができます。