【Maven】プロジェクト作成からWebアプリ起動まで

#Mavenプロジェクトをコマンドで作成～Webアプリケーションの起動までの手順を紹介します。

#目次
*  [1. Windows10にMavenをインストール](#1windows10にMavenをインストール)
*  [2. Mavenプロジェクトを作成](#2Mavenプロジェクトを作成)
*  [3. Eclipseにインポート](#3eclipseにインポート)
*  [4. Javaのバージョン変更](#4javaのバージョン変更)
*  [5. Jarファイル生成](#5jarファイル生成)
*  [6. Webアプリケーション起動](#6webアプリケーション起動)


#1.Windows10にMavenをインストール
別の記事で詳細に紹介しているので、そちらを参照ください。
 [MavenをWindows10にインストール](#https://qiita.com/j-work/items/1d9a0dd20d790235dfd5)

#2.Mavenプロジェクトを作成

```Console:Windowsコマンド
rem Mavenプロジェクト生成コマンド
mvn archetype:generate
//中略
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1594　//Enter押下

Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
7: 1.3
8: 1.4
Choose a number: 8:8 //8を入力

Define value for property 'groupId':sample //グループIDを入力

Define value for property 'artifactId':mavenSample //アーティファクトIDを入力

Define value for property 'version' 1.0-SNAPSHOT: : //未入力Enter押下

Define value for property 'package' mavenSample : : //未入力Enter押下

Confirm properties configuration:
groupId: sample
artifactId: mavenSample
version: 1.0-SNAPSHOT
package: mavenSample 
 Y: :Y //Yを入力

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: sample
[INFO] Parameter: artifactId, Value: mavenSample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: sample
[INFO] Parameter: packageInPathFormat, Value: sample
[INFO] Parameter: package, Value: sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: sample
[INFO] Parameter: artifactId, Value: mavenSample
[INFO] Project created from Archetype in dir: C:\work\mavenSample
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:38 min
[INFO] Finished at: 2020-05-10T23:56:44+09:00
[INFO] ------------------------------------------------------------------------
```
mavenSampleフォルダにプロジェクトファイルが生成されます。

#3.Eclipseにインポート
####3.1 build.gradleを編集します。

```gradle:bild.gradle
plugins {
    id 'java'
    id 'application'
    id 'eclipse'      //追加
}
```

####3.2 eclipseでインポートします。
![Eclipse_Spring_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621352/23ee192f-e8a5-7f7d-137b-2428abee3d07.png)

![Eclipse_Spring_No-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621352/70d87ecd-51d8-c0ec-1519-a0979d982d67.png)![Eclipse_Spring_No-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621352/a25d117b-1654-dd2c-37db-e8fa290803d5.png)


####3.3 ソースを修正します。
・pom.xmlのプロパティにビルドする「Javaのバージョン」を追加します。//ダウンロードしたJavaのバージョンとあわせます。
・pom.xmlの依存関係に「spring-boot-starter-web」を追加します。
・pom.xmlの依存関係に「exec-maven-plugin」を追加します。
・build->pluginManagement->pluginsにマニフェストを追加します。

```xml:pom.xml
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8	</maven.compiler.target>
</properties>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.2.6.RELEASE</version>
</dependency>
<build>
   <pluginManagement>
      <plugins>
       <!-- 中略 -->
        <plugin>
		  <groupId>org.apache.maven.plugins</groupId>
		  <artifactId>maven-jar-plugin</artifactId>
		  <configuration>
		    <archive>
		      <manifest>
		        <mainClass>mavenSample.App.Main</mainClass><!-- 修正 -->
		        <addClasspath>true</addClasspath>
		        <addExtensions>true</addExtensions>
		        <classpathPrefix>lib/</classpathPrefix>
		      </manifest>
		    </archive>
		  </configuration>
		</plugin>
		<plugin>
		  <groupId>org.apache.maven.plugins</groupId>
		  <artifactId>maven-jar-plugin</artifactId>
		  <configuration>
		    <archive>
		      <manifest>
		        <mainClass>mavenSample.App.Main</mainClass>
		        <addClasspath>true</addClasspath>
		        <addExtensions>true</addExtensions>
		      </manifest>
		    </archive>
		  </configuration>
		</plugin>
		<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <configuration>
                <mainClass>mavenSample.App</mainClass>
            </configuration>
        </plugin>
     </plugins>
    </pluginManagement>
  </build>
```
・App.javaを修正します。

```java:App.java
package mavenSample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication  //追加
public class App {

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);  //修正
	}
}

```
・コントローラークラスを追加

```java:FrontController.java
package mavenSample.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FrontController {
    @RequestMapping({ "/", "/index" })
    public String index() {
        return "Hello World";
    }
}
```

#4.Javaのバージョン変更
Eclipseで実行すると「UnsupportedClassVersionError」が発生することがあります。
「プロジェクトのプロパティ」->「Javaのビルドパス」->「JREシステムライブラリ」の「実行環境」を変更します。
※例では1.5 → 1.8に変更

![Eclipse_Spring_No-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621352/ae29750c-3cbb-8db7-1ef5-d084242e678c.png)![Eclipse_Spring_No-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621352/8cf6d914-6bc0-b316-9758-be40e9e268ca.png)

MavenのJdkデフォルトバージョンは1.5のようですね。

#5.Jarファイル生成
```Console:Windowsコマンド
# jarファイル生成コマンド
mvn package
```
mavenSample\target配下に「mavenSample-1.0-SNAPSHOT.jar」が生成されます。


#6.Webアプリケーション起動)
MavenでJavaを実行する。

```Console:Windowsコマンド
# mvn実行コマンド
mvn exec:java
```

 [http://localhost:8080/index](#http://localhost:8080/index)にアクセスすると「Hello World」が表示されます。
![Eclipse_Spring_No-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621352/d52cbbb2-edc4-5999-f792-7d59bd6305b7.png)