3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mavenを使ってみる

Last updated at Posted at 2016-12-11

概要

Mavenってなに?という状態なので、調べて使ってみることに。
個人的メモ。

Mavenとは?

下記を読んでみました。
http://d.hatena.ne.jp/keyword/Maven
https://kengotoda.gitbooks.io/what-is-maven/content/preface.html

ビルドツールApache Antのようにbuild.xmlを自分で手間をかけて記述することなくプロジェクトのビルドやデプロイ、テストレポートなどの生成を容易にすることができる。

  • PHPでいうところのPEARみたいなもの。
  • 現在はMaven3まであるようで、最新版はMaven3.3.9らしい。

Javaも使ったことないのでJavaの勉強としても、Maven使って動かしてみることに。

前提条件

  • centos7
  • java8

導入手順

$ wget http://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

$ tar xvzf apache-maven-3.3.9-bin.tar.gz

$ mv apache-maven-3.3.9 /usr/local/

$ ln -s /usr/local/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvn

$ mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-1.b15.el7_2.x86_64/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "4.4.27-boot2docker", arch: "amd64", family: "unix"

プロジェクト作成

mvn archetype:generate -DinteractiveMode=false \
                         -DarchetypeGroupId=pl.org.miki \
                         -DarchetypeArtifactId=java8-quickstart-archetype \
                         -DgroupId=hello.world \
                         -DartifactId=helloworld \
                         -Dversion=1.0-SNAPSHOT \
                         -Dpackage=hello.world \
                         -Dpackaging=jar
$ tree helloworld/
helloworld/
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- hello
    |           `-- world
    `-- test
        `-- java
            `-- hello
                `-- world

9 directories, 1 file

生成されたpom.xml

pom.xml はプロジェクトに関する情報を持つ重要なファイルです。 例えば、プロジェクトのビルドに関する情報や、依存するライブラリの情報、プラグインの設定などが含まれます。

参考
http://www.techscore.com/tech/Java/ApacheJakarta/Maven/2-2/#maven-2-4

<?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>hello.world</groupId>
	<artifactId>helloworld</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>jar</packaging>


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

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>${java.version}</source>
					<target>${java.version}</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

ソースを配置

$ pwd
/root/helloworld/src/main/java/hello/world

$ cat HelloWorld.java
package hello.world;

public class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello, world.");
    }
}

ソースコードのビルド

ビルドするとtargetディレクトリが作成される

$ cd helloworld
$ mvn compile
$ tree helloworld/
helloworld/
|-- pom.xml
|-- src
|   |-- main
|   |   `-- java
|   |       `-- hello
|   |           `-- world
|   |               `-- HelloWorld.java
|   `-- test
|       `-- java
|           `-- hello
|               `-- world
`-- target
    |-- classes
    |   `-- hello
    |       `-- world
    |           `-- HelloWorld.class
    |-- generated-sources
    |   `-- annotations
    `-- maven-status
        `-- maven-compiler-plugin
            `-- compile
                `-- default-compile
                    |-- createdFiles.lst
                    `-- inputFiles.lst

19 directories, 5 files

ソースの実行

$ java hello.world.HelloWorld

嵌ったこと1

Javaのソース内にpackage ~~~と書く場合、
Mavenのプロジェクト生成時の実行時に指定するpackageと合わせる必要があった。

嵌ったこと2

生成したソースを実行する際に上手くいきませんでした。
結果としてはjavaの実行場所がよくありませんでした。

今回の場合packageとしてhello.worldとしていた。
実行する場所としては下記でした。

$ pwd
/root/helloworld/target/classes

$ java hello.world.HelloWorld
Hello, world.

嵌ったこと3

今回の例であげているソースではありませんが
ビルドするソース内でtry-with-resourcesを利用していたことで、
上手く、ビルドできない問題が発生することがありました。
try-with-resourcesはJava7から実装されていたが、現在入れているのはJava8なので
何故、上手く行かないのか、嵌っていた。。。

で、解決策としては、プロジェクトの作成時に明示的にJava8でビルドするよっていうことを伝えてあげないといけなかった。

下記を参考にさせていただきました。
http://qiita.com/mkamotsu/items/98c6d721a87a74f2b36f
http://d.hatena.ne.jp/Kazuhira/20151010/1444479555

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?