サードパーティベンダーのjarファイルを内部のネクサスリポジトリに追加しようとしています。
私はこのコマンドを使用してそうしようとしました:
mvn deploy:deploy-file
-DgroupId=acme
-DartifactId=acme
-Dversion=1.0
-Dpackaging=jar
-Dfile=C:\tmp\acme-1.0.jar
-DrepositoryId=Nexus
-Durl=http://myserver:8888/nexus/content/repositories/thirdparty/
私のsettings.xmlに次のエントリがあります。
<servers>
<server>
<id>Nexus</id>
<username>myusername</username>
<password>mypassword</password>
</server>
</servers>
しかし、私はこのエラーを受け取ります:
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-deploy-plugin:2.7:
deploy-file (default-cli) on project standalone-pom: Failed to deploy artifacts:
Could not find artifact acme:acme:jar:1.0 in Nexus (http://myserver:8888/nexus/c
ontent/repositories/thirdparty) -> [Help 1]
何か提案はありますか?
いくつかの関連情報...次のコマンドを使用して、ローカルリポジトリに問題なくインストールできます。
mvn install:install-file
-DgroupId=acme
-DartifactId=acme
-Dversion=1.0
-Dpackaging=jar
-Dfile=C:\tmp\acme-1.0.jar
また、GAVパラメータを使用して、NexusWebインターフェイスから「アーティファクトアップロード」を試しました。
Group: acme
Artifact: acme
Version: 1.0
Packaging: jar
そして、acme-1.0.jarを選択して追加します。これは正常に完了しますが、このjarに応じてプロジェクトに「mvninstall」を実行すると、次のようになります。
Could not find artifact acme:acme:jar:1.0 in Nexus (http://myserver:8888/nexus/content/groups/public)
私のpomには以下が含まれています:
<repositories>
<repository>
<id>Nexus</id>
<url>http://myserver:8888/nexus/content/groups/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
どんな助けでも大歓迎です...
PSこの質問は これ と非常に似ていることを知っていますが、問題はネクサスURLではなくジェンキンスURLの使用にあるようです。
私自身の質問に答えます。私はこれを次のように解決しました:
1)プロキシサーバーの背後にいる(つまり、maven settings.xmlにプロキシサーバーが設定されている)が、ネクサスサーバーが内部にある場合は、settings.xmlでネクサスサーバーをnonProxyHostとして追加する必要があります。
<proxies>
<proxy>
...
<nonProxyHosts>myserver</nonProxyHosts>
</proxy>
</proxies>
実行していた"mvn deploy:deploy-file"
コマンドがネクサスリポジトリにまったく到達していないようだったので、これを行う必要があることに気付きました。たとえば、settings.xmlのサーバーセクションでリポジトリID、ユーザー名、またはパスワードを変更しても、まったく同じエラーが発生する可能性があります。また、deployコマンドのURLを意味不明に変更したり(たとえば、-Durl=notexist
に)、ネクサスリポジトリを完全にシャットダウンしたりしても、同じエラーが発生する可能性があります。
2)サードパーティのリポジトリがスナップショットではなくリリースとして設定されていることを確認します。これを行うには、Web GUIに移動し、サードパーティリポジトリの[構成]タブを選択し、[リポジトリポリシー]が[リリース]に設定されていることを確認します。
これは、catalina.outログ(Tomcatで戦争としてnexusを実行しています)を見て、次のことを確認することでわかりました。
ERROR org.sonatype.nexus.rest.ContentPlexusResource - Got exception during processing request "PUT http://myserver:888/nexus/content/repositories/thirdparty/acme/acme/1.0/acme-1.0.pom": Storing of item thirdparty:/acme/acme/1.0/acme-1.0.pom is forbidden by Maven Repository policy. Because thirdparty is a SNAPSHOT repository
これらの2つの修正を行うと、「mvn deploy:deploy-file」コマンドと、WebGUIの「UploadArtifacts」オプションを介したアップロードの両方が機能します。
Nexus Webコンソールにログインし、パブリックリポジトリの構成を確認して、サードパーティが[順序付きグループリポジトリ]リストにあるかどうかを確認します。