aws_memo
Mavenの設定とエラーの解決方法について
エラーの原因と解決方法
エラーの解読
まず、あなたが遭遇しているエラーメッセージを整理すると、以下のようになります:
Plugin org.apache.maven.plugins:maven-clean-plugin:3.2.0 or one of its dependencies could not be resolved: The following artifacts could not be resolved: ... from/to Central (https://repo.maven.apache.org/maven2): PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
このエラーは、Mavenが必要なプラグインや依存関係をMaven中央リポジトリからダウンロードしようとしたときに、SSL証明書の問題で接続が拒否されたことを示しています。
主な原因
- SSL証明書の問題:JavaがリモートリポジトリのSSL証明書を信頼できないため、接続がブロックされています。
- ネットワーク環境:企業内ネットワークでは、プロキシサーバーやファイアウォールがSSL通信を中継または検査している可能性があります。
ステップバイステップの解決策
ステップ1:基本的な確認
- インターネット接続の確認:
- ブラウザで https://repo.maven.apache.org/maven2 にアクセスできるか確認します。
- システムの日時の確認:
コンピュータの日時が正確であることを確認します。日時がずれているとSSL証明書の検証に失敗します。
ステップ2:プロキシの設定
-
プロキシサーバーの確認:
ネットワーク管理者またはIT部門に問い合わせて、プロキシサーバーの有無とその設定情報(ホスト名、ポート、ユーザー名、パスワード)を入手します。 -
Mavenの設定ファイルを編集:
-
Mavenの settings.xml ファイルにプロキシ設定を追加します。
-
settings.xml の場所:
Windows: C:\Users\あなたのユーザー名.m2\settings.xml
Mac/Linux: /Users/あなたのユーザー名/.m2/settings.xml
設定例:
<settings>
<proxies>
<proxy>
<id>proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>プロキシのホスト名</host>
<port>プロキシのポート番号</port>
<!-- 認証が必要な場合のみ以下を追加 -->
<!--
<username>プロキシのユーザー名</username>
<password>プロキシのパスワード</password>
-->
</proxy>
</proxies>
</settings>
ステップ3:SSL証明書のインポート
- 証明書の取得:
- ブラウザで https://repo.maven.apache.org/maven2 にアクセスし、SSL証明書をエクスポートします。
- 手順はブラウザによりますが、通常はアドレスバーの鍵アイコンをクリックし、証明書情報を表示してエクスポートできます。
- 証明書をJavaのキーストアにインポート:
- コマンドプロンプトまたはターミナルを管理者権限で開きます。
- 以下のコマンドを実行します(パスやファイル名は適宜変更してください):
keytool -import -alias mavenrepo -keystore "%JAVA_HOME%\lib\security\cacerts" -file C:\path\to\exported\certificate.cer
- デフォルトのキーストアパスワードは changeit です。
ステップ4:Mavenの再ビルド
以上の設定を行った後、Mavenでプロジェクトを再度ビルドしてみてください。
エラーが解消されているか確認します。
AWS SDKの設定
pom.xml に依存関係を追加
- AWS SDKの依存関係を追加:
<dependencies>
<!-- 他の依存関係 -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.530</version> <!-- 最新バージョンを確認してください -->
</dependency>
</dependencies>
- Mavenを更新:
- 依存関係を追加した後、Mavenのプロジェクトを更新します。
AWS SDKの使用
JavaコードでAWS SDKをインポートし、S3からファイルをダウンロードする機能を実装します。
AWSのアクセスキーとシークレットキーの設定も必要です。
まとめ
-
エラーの原因:SSL証明書の検証エラーにより、Mavenがリポジトリにアクセスできない。
-
解決方法:
プロキシの設定を settings.xml に追加。
SSL証明書をJavaのキーストアにインポート。 -
次のステップ:AWS SDKを pom.xml に追加し、S3との連携機能を実装。
補足
注意:証明書のインポートやプロキシ設定は慎重に行ってください。不明な点はネットワーク管理者に相談してください。
参考リンク:
Maven Proxy Settings
AWS SDK for Java V1
Mavenのインストールと設定ガイド
以下では、Apache Mavenを最初からインストールし、環境変数の設定を行う手順を説明します。
目次
前提条件の確認
Javaのインストール
MavenはJavaベースのビルドツールです。事前にJDK(Java Development Kit)がインストールされている必要があります。
-
Javaのバージョン確認
java -version
バージョン情報が表示されない場合は、Oracleの公式サイトまたはOpenJDKからJDKをダウンロードしてインストールしてください。
Mavenのダウンロード
- 公式サイトにアクセス
- Apache Maven公式ダウンロードページ
https://maven.apache.org/download.cgi
- バージョンの選択
- 最新の安定版を選択します(例:apache-maven-3.9.5-bin.zip)。
- アーカイブのダウンロード
- 「Binary zip archive」をクリックしてダウンロードします。
Mavenのインストール(展開)
- ダウンロードしたZIPファイルを展開
-
好きなディレクトリにZIPファイルを解凍します。
-
例:
Windows: C:\Program Files\Apache\Maven
macOS/Linux: /usr/local/apache-maven
- ディレクトリ構成の確認
- 展開後のディレクトリは以下のようになります。
apache-maven-3.9.5
├── bin
├── boot
├── conf
├── lib
└── LICENSE.txt
環境変数の設定
Mavenをコマンドラインから利用できるように、環境変数を設定します。
Windowsの場合
- 環境変数の設定画面を開く
- 「スタートメニュー」 → 「設定」 → 「システム」 → 「バージョン情報」 → 「システムの詳細設定」
- または、「スタート」ボタンを右クリックして「システム」 → 「システムの詳細設定」
- システム環境変数を編集
- 「環境変数」ボタンをクリック。
- 「システム環境変数」の「新規」ボタンをクリック。
- MAVEN_HOME の作成
- 変数名:MAVEN_HOME
- 変数値:Mavenを展開したパス(例:C:\Program Files\Apache\Maven\apache-maven-3.9.5)
- Path に追加
- 「システム環境変数」の一覧から Path を選択し、「編集」をクリック。
- 「新規」ボタンをクリックし、以下を追加:
%MAVEN_HOME%\bin
- 設定の反映
- すべてのウィンドウを「OK」で閉じて設定を保存。
- コマンドプロンプトを再起動します。
macOS/Linuxの場合
- ターミナルを開く
- 環境変数の設定ファイルを編集
- シェルの設定ファイルを開きます(~/.bash_profile、~/.bashrc、~/.zshrc など)。
nano ~/.bash_profile
- 以下の行を追加
export MAVEN_HOME=/usr/local/apache-maven/apache-maven-3.9.5
export PATH=$MAVEN_HOME/bin:$PATH
- MAVEN_HOME のパスは実際のMavenの展開先に置き換えてください。
- 設定の反映
- ファイルを保存して終了(Ctrl + O、Enter、Ctrl + X)。
- 以下のコマンドで設定を反映。
source ~/.bash_profile
インストールの確認
- コマンドプロンプトまたはターミナルで以下を実行
mvn -v
- 出力結果を確認
- 正常にインストールされていれば、以下のようなバージョン情報が表示されます。
Apache Maven 3.9.5 (省略)
Maven home: C:\Program Files\Apache\Maven\apache-maven-3.9.5
Java version: 1.8.0_281, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_281\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
- トラブルシューティング
- mvn コマンドが認識されない場合:
- 環境変数 Path に MAVEN_HOME\bin が正しく追加されているか確認。
- コマンドプロンプトやターミナルを再起動。
次のステップ
- プロジェクトのビルド
Mavenプロジェクトを作成し、ビルドや依存関係の管理を開始できます。 - settings.xml の設定
プロキシ環境下での利用やリポジトリ設定が必要な場合は、MAVEN_HOME/conf/settings.xml を編集します。 - AWS SDKの設定
Mavenプロジェクトの pom.xml にAWS SDKの依存関係を追加し、S3との連携を行います。
参考リンク
Apache Maven 公式サイト
Maven インストールガイド(公式ドキュメント) Maven プロキシ設定ガイド AWS SDK for Java - Mavenによる設定SSL証明書のエクスポート方法とAWS SDKの設定ガイド
目次
SSL証明書のエクスポート方法
https://repo.maven.apache.org/maven2
のSSL証明書をエクスポートする手順を、主要なブラウザについて説明します。
Google Chromeの場合
-
ブラウザでURLにアクセス
-
https://repo.maven.apache.org/maven2
をGoogle Chromeで開きます。
-
-
証明書情報を表示
- アドレスバーの左側にある鍵アイコンをクリックします。
- ポップアップが表示されるので、「接続は保護されています」をクリック。
- 「証明書は有効です」をクリックします。
-
証明書の詳細を表示
- 「証明書」ウィンドウが開きます。
- 「証明書のパス」タブで、一番上のルート証明書を選択します(例:
DigiCert Global Root CA
)。 - 「詳細」タブを選択します。
-
証明書のエクスポート
-
「ファイルへコピー」をクリックします。
-
「証明書エクスポートウィザード」が起動します。
-
エクスポートファイル形式の選択
- 「Base-64エンコード X.509(.CER)」を選択して「次へ」をクリック。
-
エクスポートファイルの保存先を指定
- ファイル名と保存場所を指定します(例:
C:\cert\maven_repo_cert.cer
)。 - 「次へ」をクリックし、「完了」をクリックします。
- ファイル名と保存場所を指定します(例:
-
-
エクスポートの確認
- 「エクスポートが成功しました」と表示されれば完了です。
Mozilla Firefoxの場合
-
ブラウザでURLにアクセス
-
https://repo.maven.apache.org/maven2
をMozilla Firefoxで開きます。
-
-
証明書情報を表示
- アドレスバーの左側にある鍵アイコンをクリックします。
- 「接続は安全です」をクリックし、「詳細情報」を選択します。
- 「セキュリティ」タブに移動します。
-
証明書を表示
- 「証明書を表示」をクリックします。
-
証明書のエクスポート
-
「証明書ビューアー」ウィンドウが開きます。
-
「詳細」タブで、必要な証明書を選択します。
-
「エクスポート」をクリックします。
-
保存形式の選択
- ファイルタイプを「X.509証明書(PEM)(.pem;.crt)」に設定します。
-
エクスポートファイルの保存先を指定
- ファイル名と保存場所を指定します(例:
/home/user/cert/maven_repo_cert.crt
)。 - 「保存」をクリックします。
- ファイル名と保存場所を指定します(例:
-
-
エクスポートの確認
- 指定した場所に証明書ファイルが保存されていれば完了です。
証明書をJavaのキーストアにインポート
-
キーストアへのインポートコマンド
-
コマンドプロンプトまたはターミナルを管理者権限で開きます。
-
以下のコマンドを実行します(パスやファイル名は適宜変更してください)。
-
Windowsの場合
keytool -importcert -alias mavenrepo -keystore "%JAVA_HOME%\lib\security\cacerts" -file "C:\cert\maven_repo_cert.cer"
-
macOS/Linuxの場合
sudo keytool -importcert -alias mavenrepo -keystore "$JAVA_HOME/lib/security/cacerts" -file "/home/user/cert/maven_repo_cert.crt"
-
-
パスワードの入力
- キーストアのパスワードを入力します(デフォルトは
changeit
)。
- キーストアのパスワードを入力します(デフォルトは
-
証明書の信頼を確認
- 「信頼しますか?」と聞かれたら、
yes
と入力してエンターキーを押します。
- 「信頼しますか?」と聞かれたら、
-
-
インポートの確認
- 「証明書がキーストアに追加されました」と表示されれば成功です。
pom.xml
に追加する方法
AWS SDKをAWS SDKを使用するために、pom.xml
に必要な依存関係とプラグインを追加します。
pom.xml
の例
完全な<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>My App</name>
<url>http://maven.apache.org</url>
<properties>
<!-- Javaのバージョンを指定 -->
<java.version>1.8</java.version>
<!-- AWS SDKのバージョンを指定 -->
<aws.sdk.version>1.12.530</aws.sdk.version>
</properties>
<dependencies>
<!-- AWS SDK for Java -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- その他の必要な依存関係 -->
<!-- 例:ロギングのためのSLF4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
<!-- Java Servlet API(Webアプリの場合) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Maven Compiler Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- Maven Assembly Plugin(必要に応じて) -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- その他のプラグイン -->
<!-- 例:Maven Clean Plugin -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<!-- Maven Shade Plugin(必要に応じて) -->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
-->
</plugins>
</build>
</project>
説明
- プロジェクト情報
<groupId>、<artifactId>、<version>:あなたのプロジェクトに合わせて変更してください。 - プロパティ
<java.version>:使用するJavaのバージョンを指定します。
<aws.sdk.version>:AWS SDKのバージョンを指定します。 - 依存関係
AWS SDK for S3
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
SLF4J(ロギング用)
- ログ出力を行う場合に必要です。
Java Servlet API
- Webアプリケーションの場合、Servlet APIが必要です。
- <scope>provided</scope> とすることで、アプリケーションサーバー(例:Tomcat)に依存関係を任せます。
ビルドプラグイン
- Maven Compiler Plugin
Javaのソースとターゲットのバージョンを指定します。 - Maven Assembly Plugin
依存関係を含むJARを作成する場合に使用します。
<mainClass> はあなたのアプリケーションのエントリポイントに変更してください。 - Maven Clean Plugin
ビルド時に生成されたファイルをクリーンアップします。 - Maven Shade Plugin
依存関係をまとめて一つのJARにパッケージングする場合に使用します。
必要に応じてコメントを外して使用してください。
注意点
バージョンの確認
- 各依存関係やプラグインの最新バージョンを公式サイトやMaven Centralで確認してください。
AWS SDKのバージョン
- 上記の例ではバージョン 1.12.530 を使用しています。最新の安定版を使用することをお勧めします。
メインクラスの指定
- アプリケーションのエントリポイントとなるクラスを指定します(例:com.example.Main)。
必要なプラグインの追加
- プロジェクトの要件に応じて、追加のプラグインを build セクションに追加してください。
補足情報
MavenでのAWS SDKの設定
- AWS SDK v1とv2の違い
AWS SDK for Javaには、バージョン1(v1)とバージョン2(v2)が存在します。
新しいプロジェクトでは、可能であればv2の使用を検討してください。
AWS SDK v2の依存関係
v2を使用する場合、依存関係は以下のようになります。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.20.69</version>
</dependency>
AWS認証情報の設定
- AWSアクセスキーとシークレットキー
環境変数、システムプロパティ、または ~/.aws/credentials ファイルを使用して設定します。 - 依存関係の追加(認証情報プロバイダ)
必要に応じて、以下の依存関係を追加します。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
コードでのAWS S3の使用例
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
public class S3DownloadExample {
public static void main(String[] args) {
String accessKey = "YOUR_ACCESS_KEY";
String secretKey = "YOUR_SECRET_KEY";
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion("us-west-2")
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
// ファイルのダウンロード処理
s3Client.getObject(new GetObjectRequest("your-bucket-name", "your-object-key"), new File("destination-file.zip"));
}
}
まとめ
-
SSL証明書のエクスポート
ブラウザを使用して https://repo.maven.apache.org/maven2 のSSL証明書をエクスポートします。
エクスポートした証明書をJavaのキーストアにインポートします。 -
pom.xml の設定
AWS SDKを含む必要な依存関係とプラグインを pom.xml に追加します。
プロジェクトの要件に合わせて、バージョンや設定を調整します。
参考リンク
Apache Maven 公式サイト
Maven プラグイン一覧
AWS SDK for Java 公式ドキュメント
Maven Central Repository
Java Keytool コマンドガイド