EclipseにおけるMavenを使ったシンプルプロジェクトの作成と実行

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

今回はよりMavenを利用したプロジェクト作成について整理します。
本記事ではMavenの説明とシンプルプロジェクトの作成を行います。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)から閲覧可能です。

なるべく、初心者目線で作成するつもりですが、分かりづらい部分ありましたら、コメント頂きたいです。

# 動作環境
|種類|バージョン|
|---|---|
|OS|Windows Professional 20H2|
|Eclipse|2022 Full Edition|

※Eclipseのダウンロードについては、[こちら](https://qiita.com/kirin1218/items/02bfeb333335842c56ae)の記事をご確認ください。


# Mavenとは
Mavenとは、プロジェクト管理ツールと[公式サイト](https://maven.apache.org/)では言っております(comprehension toolとも言っています）が、以下のような機能をもったツールと考えるとわかりやすいかと思います。

* 用意された様々なテンプレートからプロジェクトを作成できる
* サードパーティのライブラリをダウンロードして利用できる
* jarやwarファイルを作成できる
* それ以外にも、テストやインストール、デプロイなどができる
* 上記の設定をpom.xmlというテキストファイルで管理できる

と書いたもののやはり使ってみないとピンと来ませんよね

類似ツールにAntやGradleといったものがありますが、Mavenがデファクトスタンダードとなっているようです。
時系列としては、Ant→Maven→Gradleかと思っているので、将来的にGradleのシェアが増える可能性はあります。

本来はMavenのツール群を[公式サイト](https://maven.apache.org/)よりダウンロードして使用するのですが、今回のように「Pleiades All in One」を利用する場合は、EclipseにMavenが含まれているためダウンロードは不要のようです。
※コンソールなどからmvnコマンドを使用する場合は別途ダウンロードが必要

## EclipseのProxy設定
proxyとは会社などで、各社員端末からのインターネット通信などを仲介する仕組み（詳細は割愛）で、
OSやブラウザで設定しないとブラウザでのサイト閲覧ができなくなります。
Proxy環境で以下の設定を行わないと、プロジェクト作成時にずっと待機中になるようです。

ご自宅などのプライベート環境では基本はProxyの設定は不要ですので、以下は読み飛ばしてください。

EclipseではデフォルトでOSのProxy設定を利用するみたいなので(設定ダイアログ>一般>ネットワーク接続より確認)、
設定は不要のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/b834e4f7-ea57-bacf-da66-99ffbac2fbb7.png)

## MavenのProxy設定
ユーザー設定にProxy設定を追加します。
一般的にはmavenのユーザー設定ファイルは「ユーザーフォルダ/.m2/settings.xml」に作成するのですが、
今回のように、「Pleiades All in One」を利用している場合は、配置したフォルダ外に設定ファイルを起きたくなかったので、
下図の場所にファイルを新規作成しました。
参照できればどこでも良いと思うので、任意場所に作成しパスを指定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/896d3350-1e74-0701-2081-f7b838dd6b7f.png)

ファイルの中身については、新規作成の場合は、以下の内容をコピーして、環境に応じて「host」や「port」の値を変更してください。

```settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
  <proxies>
    <proxy>
      <id>http_proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.example.net</host>
      <port>8080</port>
    </proxy>
    <proxy>
      <id>https_proxy</id>
      <active>true</active>
      <protocol>https</protocol>
      <host>proxy.example.net</host>
      <port>8080</port>
    </proxy>
  </proxies>
</settings>
```
# Mavenを使ったシンプルプロジェクトの作成
メニュー>ファイル>新規>Mavneプロジェクトを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/091057bb-c4ed-31af-b63d-2a0f023f34ea.png)

新規Mavneプロジェクトダイアログで次へボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/8db963ff-0d97-1513-cb80-52e8b3baf9ed.png)

サーバー（Maven Central）よりアーキタイプ(テンプレプロジェクト）の一覧がダウンロードされます。
※初回だと数分かかる可能性あり
ダウンロード後は一覧にアーキタイプが表示されるので、フィルターに「maven-archetype-quickstart」と入力し、
グループIdが「org.apach.maven.archetypes」となっているものを選択し、次へボタンをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/87063fb9-76df-5541-eec0-befdf59018c4.png)

最後に、グループId、アーティファクトId、バージョン、パッケージを指定して、完了ボタンをクリックします。
今回は以下の画像の通りにします。

｜キー|値|
|---|---|
|グループId|com.example|
|アーティファクトId|helloworld|
|バージョン|0.0.1-SNAPSHOT|
|パッケージ|com.example.helloworld|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/675b7044-1d70-dfce-818e-b9e06778ce96.png)

以下のようなフォルダ/ファイル構成が作られればプロジェクト作成完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/6c5422d0-ad27-8ec9-fb0b-a43da51675d1.png)

この状態で一度実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/a34a8943-be43-1867-a827-b6a2b2171b28.png)

成功です。

## 対象Javaバージョンの変更
pom.xml(プロジェクトルート/pom.xml)ファイルを開いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/d40cf00d-51f8-f541-da4a-920c9d7fd588.png)

sourceは互換性を待たせるJavaバージョン(1.7はJava7相当）、targetは実行環境のJavaバージョン(1.7はJava7相当）となります。
即ち、Java7で実行するようにビルドしてねという設定になっており、プロジェクト作成時にEclipseが作成するプロジェクトの設定にも、1.7を使用するように設定されてしまうようです。

そのため、実行時にJava7で実行されたわけです。

## プロジェクトのJavaバージョンを変更する
以下のプロジェクト設定を変更します。
* JREの設定
* コンパイラーの設定

### JREの設定
プロジェクト名を右クリック>プロパティー よりプロパティーダイアログを表示し、Javaのビルド・パスを選択します。
JREシステムライブラリー[JavaSE-1.7]を選択し、除去ボタン をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/7bc8e338-941b-9c51-de09-d67ebe290c8b.png)

続いて、ライブラリーの追加ボタンをクリックし、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/2df73f3e-b85d-5c01-38e4-e6531a4d00d9.png)

ライブラリーの追加ダイアログで、JREシステムライブラリーを選択し、次へボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/29fb43c0-ec66-a011-aae4-4fe0c4d83f1f.png)

Java17が選択されていることを確認して、完了ボタンをクリックします。
※Java１７以外を指定する場合は、実行環境のラジオボタンに切り替え、対象のバージョンを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/2356a067-b429-3531-fe98-284f847d95bc.png)

### コンパイラーの設定
プロジェクトのプロパティダイアログにて、Javaコンパイラーを選択し、コンパイラー準拠レベルを17に切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/9e9b470b-0d46-d1ae-4397-db39cf77d938.png)

適用時、確認ダイアログで「はい」ボタンをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/e3dee5d7-392b-2835-8bf3-195e1bbecf77.png)

# プロジェクトのフォルダ/ファイル構成について
パッケージ・エクスプローラをプロジェクト・エクスプローラに切り替え、フォルダ/ファイル構成について確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/6c5422d0-ad27-8ec9-fb0b-a43da51675d1.png)

* .settingsフォルダ,.classpath,.project
Eclipseによって生成されたフォルダ/ファイルたちです。しばらくは、直接編集することはないと思うので割愛します。

* src/mainフォルダ内の深い階層のフォルダ
こちらはプロジェクト作成時に指定したパッケージ名とアーティファクトIDからMavenによって生成されたものです。./main/java以下は、パッケージ名とアーティファクトIDを連結し「.」をフォルダ区切りに階層が作られていることがわかります。
App.javaはテンプレートから取得したjavaファイルです。

* src/testフォルダ内の深い階層のフォルダ
ま階層ルールはsrc/main配下とほぼ同じです。
こちらはJUnitのテストを実施時に利用されます。

* target
プロジェクトのビルドを行うとその成果物がこちらのフォルダに作成されます。
今回の場合はApp.classというファイルとAppTest.classというファイルが生成されるはずです。

* pom.xml
Mavenプロジェクトの管理情報が記載れています。
こちらについては必要に応じて説明していきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/803458/f4073706-400c-3f69-a4a1-aa783364af28.png)

# 最後に
本記事ではEclipseにおけるMavenのシンプルプロジェクトの作成とMavenで作成した場合のフォルダ/ファイル構成について整理しました。

実用性を考えると、Jarファイルを作成して利用することが多く（もしくは必須？）なるかと思いますので、
次回は、Jarファイルの作成について整理しようと思います。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7)を御覧ください。

# 参考URL
[Proxy環境下でのEclipse+Maven](http://bnote.net/java/eclipse_maven_proxy.shtml)