Java-Maven-solve Maven デプロイ時間 401 Reason Phrase Unauthorized エラー
環境
- Java JDK 1.8
- メイブン 3.3.9
導入
プロジェクトは、他のプロジェクトが参照できるように、jar パッケージとしてパッケージ化してプライベート サーバーにアップロードする必要があります。このとき、mvn cleandeploy コマンドを実行する必要がありますが、実行中に 401 エラーが報告されます。
401エラーを解決する
エラーメッセージ
コマンドを実行します: mvn cleandeploy -DskipTests
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project xxxxx: Failed to deploy artifacts: Could not transfer artifact com.xxxxx:xxxxx:jar:spring
-1.0.10-20210812.035258-1 from/to nexus-snapshots (http://xxxx.com/nexus/content/repositories/snapshots): Failed to transfer file: http://xxxx.com/nexus/content/repositories/snapshots/com/.../spring-1.0.
10-SNAPSHOT/xxxxx-spring-1.0.10-20210812.035258-1.jar. Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
PS D:\...\xxxxx> mvn clean deploy -DskipTests
キーエラーメッセージ
- 主要なエラー メッセージ 1: アーティファクトのデプロイに失敗しました
- 主なエラー メッセージ 2: アーティファクト com.*:*:pom:* をスナップショット (http://dev-mvn.***.com/content/repositories/snapshots/) との間で転送できませんでした
- 主なエラー メッセージ 3: リターン コード: 401、ReasonPhrase: Unauthorized. -> [ヘルプ 1]
- キーの抽出エラー メッセージ: 転送できませんでした…スナップショットとの間で…リターン コード: 401、ReasonPhrase: Unauthorized。
- 明らかに、サーバーは権限の問題によりこのプッシュを拒否しました。
解決
- 開発環境で使用するMaven設定ファイルを確認する
- アイデアを使っています
- maven配置位置:File/Settings; Build,Execution,Deployment/Build Tools/Maven;
- ユーザー設定ファイル: D:/java/maven/apache-maven-3.3.9\conf\settings.xml
- settings.xml を変更し、次の構成を追加します。
<!--服务器元素包含配置服务器时需要的信息 -->
<servers>
<server>
<!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。-->
<id>nexus-snapshots</id>
<username>deployment</username>
<password>123456</password>
</server>
...
</servers>
- mvn clean apply -DskipTests コマンドを再度実行すると、アップロードが成功しました。
[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ mytest ---
Downloading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/maven-metadata.xml
Uploading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/mytest-spring-1.0.10-20210812.035231-1.jar
Uploaded: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/mytest-spring-1.0.10-20210812.035231-1.jar (127643 KB at 13522.8 KB/sec)
Uploading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/mytest-spring-1.0.10-20210812.035231-1.pom
Uploaded: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/mytest-spring-1.0.10-20210812.035231-1.pom (7 KB at 53.9 KB/sec)
Downloading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/maven-metadata.xml
Uploading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/maven-metadata.xml
Uploaded: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/maven-metadata.xml (803 B at 8.2 KB/sec)
Uploading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/maven-metadata.xml
Uploaded: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/maven-metadata.xml (297 B at 2.5 KB/sec)
Uploading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/mytest-spring-1.0.10-20210812.035231-1-sdk.jar
Uploaded: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/mytest-spring-1.0.10-20210812.035231-1-sdk.jar (602 KB at 3039.0 KB/sec)
Uploading: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/maven-metadata.xml
Uploaded: http://dev.xxx.com/nexus/content/repositories/snapshots/com/xxxx/spring-1.0.10-SNAPSHOT/maven-metadata.xml (1021 B at 8.4 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.694 s
[INFO] Finished at: 2023-08-22T11:56:51+08:00
[INFO] Final Memory: 73M/974M
[INFO] ------------------------------------------------------------------------
mvn package、install、deploy コマンドの違い
mvn package コマンド: プロジェクトのターゲット ディレクトリに Java パッケージを生成します
package を使用してプロジェクトをパッケージ化すると、プロジェクト ディレクトリにターゲット フォルダーが生成されます。
MVC プロジェクトなどの Web プロジェクトの場合、このフォルダーの下に war パッケージが生成され、サーバーの tomcat/webapps ディレクトリに配置されて実行されます。
Java プロジェクトの場合は、このフォルダーの下に jar パッケージが生成され、サーバー上の指定されたディレクトリに配置され、「java -jar jar パッケージ名」コマンドで実行されます。
通常、当社のサーバー導入サービスでは、パッケージ方式を使用してプロジェクトをパッケージ化します。
mvn install コマンド: Java パッケージをローカルの Maven ウェアハウスにインストールします
install メソッドを使用すると、プロジェクトが Maven 依存関係に変換され、ローカルの Maven ウェアハウスに保存されます。
たとえば、Spring Boot プロジェクトが mvn install コマンドを実行すると、jar はローカルの Maven ウェアハウスに保存されます。
たとえば、私が自分で設定した Maven パスは D:\java\maven\repository... です。
一般に、複数のプロジェクトでは、たとえば、プロジェクト a でプロジェクト b を使用する一部のメソッドは、プロジェクト b を依存関係として追加する必要があります。このとき、プロジェクト b は、install メソッドを使用してローカルの [maven] ウェアハウスにパッケージ化して提供する必要があります。プロジェクト a 依存インポート呼び出し。
mvndeploy コマンド: Java パッケージを中央ウェアハウスに公開します (注: Maven で権限を持ってプッシュ アカウント名とパスワードを設定する必要があります)
デプロイとインストールの主な違いは、インストールではプロジェクト jar パッケージがローカル ウェアハウスに配置されるのに対し、デプロイではプライベート サーバー ウェアハウスに配置されることです。
ローカル pom ファイルでプライベート サーバー ウェアハウス情報を構成した後、deploy コマンドを実行して、maven によって作成された jar パッケージをリモート リポジトリにアップロードします。これは、他の開発者やプロジェクトが共有するのに便利です。
Maven デプロイ コマンドが正常に実行された後、プライベート サーバーにログインしてクエリを実行すると、対応する jar パッケージが表示されます。
mvn スキップテストコード
上記のコマンドを直接実行すると、単体テスト コードがデフォルトで実行されます。単体テストをスキップするには、次のコマンドを使用します。
- mvn -DskipTests
- mvn -Dmaven.test.skip=true
違い
- mvn クリーン パッケージ -DskipTests
- テスト ケースは実行されませんが、テスト ケース クラスはコンパイルされ、対応するクラス ファイルが target/test-classes ディレクトリに生成されます。
- mvn package -DskipTests を使用して単体テストをスキップしますが、コンパイルは続行します。
- mvn clean package -Dmaven.test.skip=true
- テスト ケースを実行せず、テスト ケース クラスをコンパイルしません。
- maven.test.skip を使用すると、単体テストの実行だけでなく、テスト コードのコンパイルもスキップされます。