Spring Boot をはじめてみるよ(Maven コマンド編)
上記では、 STS の GUI でプロジェクトを作りました。
GUI が裏でヨロシクやってくれていたのですが、何が行われていたのか分からないと、何かを変えたい時にどこを修正すればよいのかも分かりません。
そこで、 GUI を使わずに作成する方法を確認してみましょう。
下準備
- jdk のインストール
- Maven のインストール
- STS(Spring Tool Suite)のインストール
を行います。ここでは、 Maven のインストールだけ触れておきます。
ちなみに、なんで Gradle じゃなくて Maven なの? と言われてしまうかもですが、 Maven には後述する archetype:generate
というのがあるので、最初の敷居が低くなるから(説明が若干省けるから)です。
Gradle を使いたい人は、 Gradle で試してみてください。
Maven の導入
Windows の場合
公式サイトからダウンロードして入れておけばOK!
Maven – Welcome to Apache Maven
PATH を通して cmd.exe から mvn
コマンドが使えるようにしておきます。
Mac の場合
homebrew を入れている前提ですが、 brew
コマンドでインストールできます。
$ brew update # 一応 formula を更新しておいてから、 $ brew install maven # Maven をインストールします。
インストールの確認
mvn --version
で、バージョン情報が表示されればOK。
$ mvn --version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec Java version: 1.8.0_45, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre Default locale: ja_JP, platform encoding: UTF-8 OS name: "mac os x", version: "10.11.2", arch: "x86_64", family: "mac"
Spring Boot プロジェクト作成
空の Maven プロジェクトから作る
mvn
コマンドで空のプロジェクトを作ることができます。
$ mvn -B archetype:generate -DgroupId=edu.self -DartifactId=my_first_spring_boot -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart $ cd my_first_spring_boot/
-B
は 「Run in non-interactive (batch) mode」という意味です。コマンド実行時に「パッケージは edu.self でいい?」といった質問をされずに済みます。それだけです。
archetypeArtifactId
はどんなスケルトンを作るかを指定します。
maven-archetype-quickstart
を指定すると、世間的にデファクトとなっている、ちょうどいい感じの空の Maven プロジェクトが作成されます。(他にも色々ありますが、まあ、使わんです。)
ここで指定した引数は以下のようになります。
パラメータ | 引数 | 意味 |
---|---|---|
groupId | edu.self | プロジェクトを一意に識別する名前。 プロジェクトのルートパッケージ名を指定するのが一般的です。 |
artifactId | my_first_spring_boot | プロジェクトの成果物の名前。 作成する JAR や WAR, EAR ファイルなどの名前に使用されます。 |
version | 1.0.0-SNAPSHOT | プロジェクトのバージョン。 |
archetypeArtifactId | maven-archetype-quickstart | 作成するスケルトンの種類。 |
STS の利用
Maven で作成したプロジェクトを STS にインポート
STS.app を起動します。
次に、Maven で作成したプロジェクトを STS にインポートします。
[File] > [Import] > [Maven] > [Existing Maven Projects]
で、作成したプロジェクトを指定します。
以降、STS を使って作業をします。
これで各種インストールはおしまいです。
プロジェクトの設定変更
自動で作られたプロジェクトは Spring のプロジェクトではないので、「Spring を使うよ!」という設定にしてみましょう。
pom.xml の編集して Spring の利用を宣言
プロジェクトには、pom.xml と App.java (とそのテスト)だけ作成されています。
pom.xml は Maven プロジェクトの設定ファイルです。 pom.xml に Spring Boot を利用するよう変更します。 以下の【追加】、【削除】とコメントのある部分のみ変更を加えています。
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>edu.self</groupId> <artifactId>my_first_spring_boot</artifactId> <packaging>jar</packaging> <version>1.0.0-SNAPSHOT</version> <name>my_first_spring_boot</name> <url>http://maven.apache.org</url> <!-- Spring Boot の利用を宣言し、バージョンを指定【追加】 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.1.RELEASE</version> </parent> <dependencies> <!-- Spring Boot の Web アプリケーションライブラリの利用を指定【追加】 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Boot の ユニットテストライブラリの利用を指定【追加】 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- JUnitの指定を削除(Spring Boot に同梱されているため)【削除】 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> --> </dependencies> <build> <plugins> <!-- Spring Boot の ビルド用 Maven プラグイン【追加】 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <properties> <!-- Java バージョン指定【追加】 --> <java.version>1.8</java.version> </properties> </project>
Spring Boot 関連では以下の3つの依存パッケージを追加しました。
これでこのプロジェクトで利用する各種ライブラリを Web 経由で取得できるようになります。
なお、spring-boot-starter-parent
は必須です。
- Spring Boot の基本パッケージ(
spring-boot-starter-parent
)これをベースに web や batch などを追加していきます。 - Spring Boot の Web 基本パッケージ(
spring-boot-starter-web
) - Spring Boot の UnitTest の基本パッケージ(
spring-boot-starter-test
)
あとは、Maven で Spring Boot を扱えるようにするためのプラグイン spring-boot-maven-plugin
と、 Java8 を使うという指定の2つを入れています。
さて、今、 STS 上ではエラー表示が出ているのではないかと思います。 pom.xml の設定変更を STS が認識していないからです。反映させてあげましょう。
プロジェクトを右クリック > Maven > Update Project...
これでエラー表示が消えたはずです。
利用ライブラリの確認
Spring Boot に「お任せでいい感じのライブラリを入れといて!」という指示をしました。 実際にどのようなライブラリが使われるのか、確認してみましょう。
$ mvn dependency:tree
使われるライブラリの一覧がツリー状に表示されます。
もちろん STS の Package Explorer でも見ることができます。
簡単な Web アプリで 「Hello Spring Boot!」
今回、 spring-boot-starter-web
を入れたので、ブラウザで表示できることを確かめましょう。
簡単な Web アプリの作成
すでに App.java がエントリーポイントとして存在しますので、これを編集して使ってみましょう。
@RestController // Webアプリのリクエストを受け付けるクラスであることの指定 @EnableAutoConfiguration // 様々な設定を自動的に有効化 public class App { @RequestMapping("/") // URLのパスの指定 public String index() { return "Hello Spring Boot!"; } public static void main(String[] args) { // Spring Bootによるアプリケーションを起動するための処理です。 SpringApplication.run(App.class, args); } }
はい、こんだけです。
コンソールからの起動
Maven で Spring Boot を起動します。裏で Tomcat が起動することになります。
$ mvn spring-boot:run
http://localhost:8080/ にアクセスして「Hello Spring Boot!」と表示されればOKです。
Ctrl + c で、Tomcat を Stop しておきましょう。
STSからの起動
App.java を右クリックして「Spring Boot App」の実行をしてもOK。これでも Tomcat が起動します。
[Run As] > [Spring Boot App]
どちらでも、好きな方法で起動しましょう。
実行可能な jar を作って配布
GUI から実行もできるのですが、コマンドを打って実行することで、 GUI で行われていることが何であったのか確認しておきましょう。
jar の作成と実行
作成は簡単。以下のコマンドで、 ./target
フォルダに jar ファイルが作成されます。
$ mvn packege
起動は jar を実行するだけです。 Tomcat が立ち上がります。
$ java -jar target/my_first_spring_boot-1.0.0-SNAPSHOT.jar
http://localhost:8080/ にアクセスして「Hello Spring Boot!」と表示されればOKです。
war ファイルで運用するのは大変?
と、タイトルに書きましたが、簡単にはできません。 Spring Boot は jar で運用することを前提としているようですので、この変更はちょっと面倒です。
ただ、 GUI から war をターゲットにしたプロジェクトを自動生成することができます。 これまでの説明で作成したプロジェクトと比較すれば、どういう仕組にすれば良いのか自ずと見えてくると思います。
Tomcat や他の AP サーバーがすでに存在しているところにアプリケーションを提供することは多々あると思います。 そういう場合はこの対応が必要になってきますので、ちょっと頑張ってやってみましょう。
おわりに
以上です。
そこそこちゃんとした Web アプリを作るお話はまた別の機会に!