KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

Apache Mavenについて学ぶ

「Javaプログラミング技法」の第15回目の授業内容まとめになります。

※前回授業の内容はこちら

www.kato-eng.info

Apache Maven

Apache MavenとはJava言語のビルドツールで最も有名なもののひとつで、下記の項目を自動化してくれる。

  • ビルドとテスト
  • ライブラリの依存解決
  • 配備
  • プロダクト公開サイトの雛形作成

基本的にはコマンドライン(mvn)で利用するが、Eclipseで利用することもできる。

Artifact

Mavenでは成果物のことをArtifactとよぶ。Artifactは「クラスファイル」「ソースコード」「Javadoc」などをJARファイルで圧縮して配布される。

Artifactには命名規則がある。

[Artifact ID]-[Version]-[Type].[Extension]

Artifactの名前例は以下の通り。

  • commons-lang3-3.6.pom
    • プロジェクト情報
  • commons-lang3-3.6.jar
    • コンパイル済JAR

Mavenリポジトリ

MavenリポジトリはArtifactを蓄積及び共有するシステムである。リポジトリは下記に示すように3階層になっている。

  • Mavenセントラルリポジトリ(ex: 公開用)
  • リモートリポジトリ(ex: 社内専用)
  • ローカルリポジトリ(端末用)

pom.xml

Mavenでプロジェクトの情報を記述するためのメタデータを扱うxmlファイルがpom.xmlである。pom.xmlファイルで扱う設定項目は下記の通り。

  • プロジェクト名
  • グループ名
  • Artifact ID
  • バージョン
  • 依存する成果物一覧
  • ビルド・テスト方法

EclipseでのMaven利用

Mavenを利用する際に「グループID」「Artifact ID」「バージョン」を決めておく。今回使用するのは下記の通り。

  • グループID
    • info.kato-eng
  • Artifact ID
    • sampleapp
  • バージョン
    • 0.0.1-SNAPSHOT

Artifactを取得するにはMavenrepositoryを利用する。

Maven Repository: Search/Browse/Explore

Google gson

gsonはGoogle社が提供するJSONデータとJavaオブジェクトを相互に変換するライブラリです。下記例ではJSONをJavaの配列に変換しています。

<!-- pom.xml -->

...[[ 省略 ]]...

  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <!-- dependenciesにArtifactを記述する -->
  <dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
    </dependency>
  </dependencies>
</project>
// GsonDemo.java

import com.google.gson.Gson;

public class GsonDemo {
    public static void main(String[] args) {
        String[] as = {"a", "b", "c"};
        Gson gson = new Gson();
        String s = gson.toJson(as);
        System.out.println(s);
    }
}

出力結果

["a","b","c"]

jsoup

jsoupはJavaでHTML解析を行うことができるライブラリです。

<!-- pom.xml -->

...[[ 省略 ]]...

  <dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
    </dependency>
        <!-- dependencyを追加する -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.3</version>
        </dependency>
  </dependencies>
</project>
// JsoupDemo.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupDemo {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("http://www.aiit.ac.jp").get();
        for (Element e : doc.select("div#main dl a")) {
            System.out.println(e.text());
        }
    }
}

出力結果

enPiT2「アジャイル開発概論」のビデオ教材をFisdomで一般公開しています。
平成29年度「しながわ学びの杜」産業技術大学院大学パートナーシップ講座の参加者を募集しています
韓国京畿道高陽教育支援庁教育行政官他12名が来訪されました。
修了生のインタビューが『JB PRESS』に掲載されました
修了生のインタビューが『大学&大学院.net』に掲載されました

itextpdf

<!-- pom.xml -->

...[[ 省略 ]]...

  <dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
    </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.3</version>
        </dependency>
        <!-- dependencyを追加する -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
  </dependencies>
</project>
// PDFDemo

import java.io.FileOutputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;

public class PDFDemo {
    public static void main(String[] args) throws Exception {
        Document doc = new Document();
        PdfWriter.getInstance(doc, new FileOutputStream("sample.pdf"));
        doc.open();
        doc.add(new Paragraph("Hello, world!"));
        doc.close();
    }
}

実行するとPDFファイルがプロジェクトのディレクトリに作成される。

f:id:masayuki_kato:20170805210131p:plain

zxing javase

<!-- pom.xml -->

...[[ 省略 ]]...

  <dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
    </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.3</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <!-- dependencyを追加する -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.0</version>
        </dependency>
  </dependencies>
</project>
// QRDemo.java

import java.nio.file.FileSystems;
import java.nio.file.Path;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

public class QRDemo {
    public static void main(String[] args) throws Exception {
        String text = "http://www.aiit.ac.jp";
        QRCodeWriter w = new QRCodeWriter();
        BitMatrix m = w.encode(text, BarcodeFormat.QR_CODE, 256, 256);
        Path out = FileSystems.getDefault().getPath("aiit-qr.png");
        MatrixToImageWriter.writeToPath(m, "png", out);
    }
}

実行すると下記のようなpngファイルがプロジェクトディレクトリに作成される。

f:id:masayuki_kato:20170805210449p:plain

まとめ

Mavenにはオープンソースのライブラリが充実しているが、ライセンスがライブラリによって異なり、商用利用ができなかったりするなどのトラブルが発生する恐れがあるのでよく確認すること。