Apache Maven という名のビルドツールでSpring Boot

ビルドツールいろいろありますね、Googleが社内で利用していたノウハウをベースにしたBazelというものも出てるみたいですね。

今回は、Apache Mavenです。環境は、Windows10 Homeでございます。

Apache Mavenのダウンロード

https://maven.apache.org/download.cgi にアクセスします。

f:id:ts0818:20171105174910j:plain

下の方にスクロールして、「Binary Zip Archive」の「apache-maven-x.x.x.bin.zip」を選択。

f:id:ts0818:20171105174929j:plain

ダウンロードしたzipの中身を適当な場所に配置。今回はC:¥Program Files(x86)直下へ。

f:id:ts0818:20171105180034p:plain

「続行(C)」。 

f:id:ts0818:20171105180147j:plain

配置されました。

f:id:ts0818:20171105180310j:plain

 

環境変数への追加

binの中身が利用できるよう、環境変数へ追加していきます。「システム(Y)」>「システム情報」>「システムの詳細設定」ときて、「環境変数(N)...」を選択。

f:id:ts0818:20171105181128j:plain

「システム環境変数(S)」で「M2_HOME」の「編集(I)...」。まだ作成していない場合は「新規(W)....」で。

f:id:ts0818:20171105181317j:plain

「変数値(V):」を、

f:id:ts0818:20171105181524j:plain

新しく配置したフォルダまでのパスに設定し、「OK」。

f:id:ts0818:20171105181555j:plain

そしたら、「システム環境変数(S)」で「Path」の「編集(I)...」。

f:id:ts0818:20171105181655j:plain

「新規(N)」で「%M2_HOME%¥bin」を追加してください。「OK」。

f:id:ts0818:20171105181739j:plain

コマンドプロンプトを起動し、

mvn -v

でバージョンが表示されればOK。

f:id:ts0818:20171105181854j:plain

 

Mavenでプロジェクトの作成

コマンドプロンプトで、プロジェクトを作成したい場所に移動し、 

cd C:\Users\Toshinobu\Desktop
mvn archetype:generate

f:id:ts0818:20171105183237j:plain

空Enter。

f:id:ts0818:20171105185204j:plain

デフォルトで最新バージョンが選択された状態になっているので、問題なければEnter。

f:id:ts0818:20171105185247j:plain

groupIdを聞かれるので、適当に入力。Enter。(Javaでいうところのパッケージ名のようなイメージのようです。)

f:id:ts0818:20171105185410j:plain

artifactIdを聞かれるので適当に入力。Enter。(アプリケーション名に相当するもののようです。)

f:id:ts0818:20171105185552j:plain

プロジェクトをWARファイルに変換するときなどのバージョン。デフォルト値で問題ないようなので、Enter。

f:id:ts0818:20171105190545j:plain

パッケージ名もデフォルトで設定されるもので問題ないようです。Enter。

f:id:ts0818:20171105192145j:plain

そのまま、Enter。

f:id:ts0818:20171105192231j:plain

プロジェクトが作成されました。

f:id:ts0818:20171105192304j:plain

デスクトップにプロジェクトが作成されています。 

f:id:ts0818:20171105192608j:plain

pom.xmlを編集します。EclipseSTSプラグイン込み)でSpring Bootのプロジェクト(バージョンは、「2.0.0.M5」にしました。)を作成してできたpom.xmlの内容を貼れば良いみたいです。

<?xml version="1.0" encoding="UTF-8"?>
<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.ts0818.springboot</groupId>
  <artifactId>ts0818BootApp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>ts0818BootApp</name>
  <url>http://maven.apache.org</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.M5</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

	<pluginRepositories>
		<pluginRepository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
		<pluginRepository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

</project>

保存したら、コマンドプロンプトで、

 

mvn spring-boot:run

f:id:ts0818:20171105203745j:plain

f:id:ts0818:20171105203731j:plain

コマンドプロンプトで、「Hello World!」と表示されてます。

これは、 「App.java」の中身を見てみると、

package com.ts0818.springboot;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

となっていることから、お馴染みのJavaアプリケーションのmainメソッドが実行されているためですね。EclipseSTSプラグイン込み)などで、「Spring スターター・プロジェクト」でプロジェクトを作成すると、この「App.java」の部分が、

package com.example.demo;

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

@SpringBootApplication
public class SpbootTestApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpbootTestApplication.class, args);
	}
}
    
    

みたいな感じになっていきます。Mavenだとpom.xmlの調整などいろいろ必要になってくるようで、使いこなすのは難しそうですね。

とりあえず、Mavenはこんなところで。