このガイドでは、Maven を使用して簡単な Java プロジェクトを構築する方法を説明します。
構築する
時刻を提供するアプリケーションを作成し、Maven でビルドします。
必要なもの
約 15 分
お気に入りのテキストエディターまたは IDE
JDK 8 (英語) 以降
このガイドを完了する方法
ほとんどの Spring 入門ガイドと同様に、最初から始めて各ステップを完了するか、すでに慣れている場合は基本的なセットアップステップをバイパスできます。いずれにしても、最終的に動作するコードになります。
最初から始めるには、プロジェクトをセットアップするに進みます。
基本をスキップするには、次の手順を実行します。
このガイドを Eclipse で「Spring 入門コンテンツのインポート」するか、ソースリポジトリをダウンロードして解凍、または、Git (英語) を使用してクローンを作成します。
git clone https://github.com/spring-guides/gs-maven.git (英語)
gs-maven/initial
に cd初期にジャンプしてください。
完了したときは、gs-maven/complete
のコードに対して結果を確認できます。
プロジェクトをセットアップする
まず、Maven がビルドする Java プロジェクトをセットアップする必要があります。Maven に焦点を当て続けるために、現時点ではプロジェクトをできるだけシンプルにしてください。選択したプロジェクトフォルダーにこの構造を作成します。
ディレクトリ構造を作成する
選択したプロジェクトディレクトリで、次のサブディレクトリ構造を作成します。たとえば、*nix システム上の mkdir -p src/main/java/hello
の場合:
└── src └── main └── java └── hello
src/main/java/hello
ディレクトリ内で、必要な Java クラスを作成できます。このガイドの残りの部分との一貫性を維持するには、これら 2 つのクラス HelloWorld.java
および Greeter.java
を作成します。
src/main/java/hello/HelloWorld.java
package hello;
public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}
src/main/java/hello/Greeter.java
package hello;
public class Greeter {
public String sayHello() {
return "Hello world!";
}
}
Maven でビルドする準備ができたプロジェクトができたため、次のステップは Maven をインストールすることです。
Maven は、https://maven.apache.org/download.cgi (英語) で zip ファイルとしてダウンロードできます。必要なのはバイナリのみです。apache-maven- {version} -bin.zip または apache-maven- {version} -bin.tar.gz へのリンクを探してください。
zip ファイルをダウンロードしたら、コンピューターに解凍します。次に、bin フォルダーをパスに追加します。
Maven インストールをテストするには、コマンドラインから mvn
を実行します。
mvn -v
すべてうまくいけば、Maven のインストールに関する情報が表示されます。次のようになります(おそらく少し異なります)。
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00) Maven home: /home/dsyer/Programs/apache-maven Java version: 1.8.0_152, vendor: Azul Systems, Inc. Java home: /home/dsyer/.sdkman/candidates/java/8u152-zulu/jre Default locale: en_GB, platform encoding: UTF-8 OS name: "linux", version: "4.15.0-36-generic", arch: "amd64", family: "unix"
おめでとう! これで、Maven がインストールされました。
INFO: Maven ラッパー: GitHub (英語) を使用して、開発者が Maven の正しいバージョンを持っているか、まったくインストールしないようにすることを検討してください。Spring Initializr (英語) からダウンロードしたプロジェクトには、ラッパーが含まれています。プロジェクトの最上位に mvn
の代わりに実行するスクリプト mvnw
として表示されます。
シンプルな Maven ビルドを定義する
Maven がインストールされたため、Maven プロジェクト定義を作成する必要があります。Maven プロジェクトは、pom.xml という名前の XML ファイルで定義されます。とりわけ、このファイルは、プロジェクトの名前、バージョン、外部ライブラリに対する依存関係を提供します。
プロジェクトのルートに pom.xml という名前のファイルを作成し(つまり、src
フォルダーの隣に配置し)、次の内容を指定します。
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-maven</artifactId>
<packaging>jar</packaging>
<version>0.1.0</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<plugins>
<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>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>hello.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
オプションの <packaging>
要素を除いて、これは Java プロジェクトのビルドに必要な最も単純な pom.xml ファイルです。プロジェクト構成の次の詳細が含まれます。
<modelVersion>
。POM モデルバージョン(常に 4.0.0)。<groupId>
。プロジェクトが属するグループまたは組織。多くの場合、逆ドメイン名として表されます。<artifactId>
。プロジェクトのライブラリアーティファクトに付けられる名前(たとえば、JAR または WAR ファイルの名前)。<version>
。ビルド中のプロジェクトのバージョン。<packaging>
- プロジェクトのパッケージ方法。JAR ファイルのパッケージ化のデフォルトは「jar」です。WAR ファイルのパッケージ化には「war」を使用します。
バージョン管理スキームの選択に関しては、Spring はセマンティックバージョン管理 (英語) アプローチを推奨しています。 |
この時点で、最小限でありながら有能な Maven プロジェクトが定義されました。
Java コードをビルドする
Maven でプロジェクトをビルドする準備ができました。プロジェクトのコードをコンパイルし、ライブラリパッケージ(JAR ファイルなど)を作成し、ローカル Maven 依存関係リポジトリにライブラリをインストールするなど、Maven でいくつかのビルドライフサイクルのゴールを実行できます。
ビルドを試すには、コマンドラインで次を発行します。
mvn compile
これにより、Maven が実行され、コンパイルのゴールを実行するように指示されます。完了したら、コンパイルされた .class ファイルが target/classes ディレクトリにあります。
.class ファイルを直接配布したり操作したりする可能性は低いため、代わりにパッケージのゴールを実行することをお勧めします。
mvn package
パッケージのゴールは、Java コードをコンパイルし、テストを実行し、ターゲットディレクトリ内の JAR ファイルにコードをパッケージ化することで終了します。JAR ファイルの名前は、プロジェクトの <artifactId>
および <version>
に基づきます。例: 以前の最小の pom.xml ファイルを指定すると、JAR ファイルの名前は gs-maven-0.1.0.jar になります。
JAR ファイルを実行するには:
java -jar target/gs-maven-0.1.0.jar
<packaging> の値を「jar」から「war」に変更した場合、結果は JAR ファイルではなく、ターゲットディレクトリ内の WAR ファイルになります。 |
Maven は、プロジェクトの依存関係にすばやくアクセスできるように、ローカルマシンの依存関係のリポジトリ(通常はホームディレクトリの .m2/repository ディレクトリ)を維持します。プロジェクトの JAR ファイルをそのローカルリポジトリにインストールする場合は、install
ゴールを呼び出す必要があります。
mvn install
インストールのゴールは、プロジェクトのコードをコンパイル、テスト、パッケージ化し、ローカルの依存関係リポジトリにコピーして、別のプロジェクトが依存関係として参照できるようにすることです。
依存関係について言えば、今度は Maven ビルドで依存関係を宣言します。
依存関係を宣言する
単純な Hello World サンプルは完全に自己完結型であり、追加のライブラリに依存しません。ただし、ほとんどのアプリケーションは、一般的な複雑な機能を処理するために外部ライブラリに依存しています。
例: 「Hello World!」と言うだけでなく、アプリケーションに現在の日付と時刻を出力させたいとします。ネイティブ Java ライブラリの日付と時刻の機能を使用することもできますが、Joda Time ライブラリを使用することでさらに面白くすることができます。
まず、HelloWorld.java を次のように変更します。
src/main/java/hello/HelloWorld.java
package hello;
import org.joda.time.LocalTime;
public class HelloWorld {
public static void main(String[] args) {
LocalTime currentTime = new LocalTime();
System.out.println("The current local time is: " + currentTime);
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}
ここでは、HelloWorld
は Joda Time の LocalTime
クラスを使用して現在の時刻を取得および出力します。
mvn compile
を実行してプロジェクトをビルドする場合、ビルドでコンパイル依存関係として Joda Time を宣言していないため、ビルドは失敗します。これを修正するには、pom.xml に次の行を追加します(<project>
要素内)。
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
この XML ブロックは、プロジェクトの依存関係のリストを宣言します。具体的には、Joda Time ライブラリの単一の依存関係を宣言します。<dependency>
要素内で、依存関係座標は 3 つのサブ要素によって定義されます。
<groupId>
- 依存関係が属するグループまたは組織。<artifactId>
- 必要なライブラリ。<version>
- 必要なライブラリの特定のバージョン。
デフォルトでは、すべての依存関係は compile
依存関係としてスコープされます。つまり、コンパイル時に使用可能である必要があります(WAR ファイルを作成している場合(WAR の /WEB-INF/libs フォルダーを含む))。さらに、<scope>
要素を指定して、次のスコープのいずれかを指定できます。
provided
- プロジェクトコードのコンパイルに必要な依存関係ですが、コードを実行するコンテナー(Java Servlet API など)によって実行時に提供されます。test
- テストのコンパイルと実行に使用される依存関係。ただし、プロジェクトのランタイムコードの構築または実行には必要ありません。
mvn compile
または mvn package
を実行すると、Maven は Maven セントラルリポジトリからの Joda Time 依存関係を解決し、ビルドが成功します。
テストを書く
最初に、テスト範囲で、pom.xml への依存関係として JUnit を追加します。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
次に、次のようなテストケースを作成します。
src/test/java/hello/GreeterTest.java
package hello;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.*;
import org.junit.Test;
public class GreeterTest {
private Greeter greeter = new Greeter();
@Test
public void greeterSaysHello() {
assertThat(greeter.sayHello(), containsString("Hello"));
}
}
Maven は、「surefire」というプラグインを使用して単体テストを実行します。このプラグインのデフォルト構成は、*Test
と一致する名前を持つ src/test/java
のすべてのクラスをコンパイルして実行します。次のようにコマンドラインでテストを実行できます
mvn test
または、すでに上で示した mvn install
ステップを使用します(「インストール」のステージとして「テスト」が含まれるライフサイクル定義があります)。
完成した pom.xml
ファイルは次のとおりです。
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-maven</artifactId>
<packaging>jar</packaging>
<version>0.1.0</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- tag::joda[] -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.2</version>
</dependency>
<!-- end::joda[] -->
<!-- tag::junit[] -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- end::junit[] -->
</dependencies>
<build>
<plugins>
<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>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>hello.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
完成した pom.xml ファイルは、JAR ファイルを実行可能にするという単純な利便性のために Maven Shade プラグイン: Apache (英語) を使用しています。このガイドの焦点は、この特定のプラグインを使用せずに、Maven を開始することです。 |
要約
おめでとう! Java プロジェクトを構築するためのシンプルで効果的な Maven プロジェクト定義を作成しました。
関連事項
次のガイドも役立ちます。
新しいガイドを作成したり、既存のガイドに貢献したいですか? 投稿ガイドラインを参照してください: GitHub (英語) 。
すべてのガイドは、コード用の ASLv2 ライセンス、およびドキュメント用の Attribution、NoDerivatives クリエイティブコモンズライセンス (英語) でリリースされています。 |