14
社内勉強会資料 へのはじめの一歩 Ohno Yuri 1363日月曜日

Mavenへのはじめの一歩

Embed Size (px)

DESCRIPTION

Apache Mavenについて。 社内勉強会用に作成した資料です。

Citation preview

Page 1: Mavenへのはじめの一歩

社内勉強会資料

へのはじめの一歩Ohno Yuri

13年6月3日月曜日

Page 2: Mavenへのはじめの一歩

あなたの身の回りで起きていること アプリケーションの動かし方(コンパイル、テスト、実行)が作った人にしかわからない

関連するライブラリがたくさんあり、良くわからないっ!

手順書がないっ!!

Apache Mavenでビルドの見通しを良くしよう

13年6月3日月曜日

Page 3: Mavenへのはじめの一歩

Javaのビルドツールの移り変わり

APACHE MAVENで誰でも達人

・コマンドラインからコンパイルし、実行する・-classpathで外部jarやクラスを含める

・build.xmlにビルド方法を記述する・必要なライブラリについていっしょに配布する

・pom.xmlより依存するライブ ラリを記述する・必要なライブラリはインターネット越しに取得される

$ javac Hello.java $ java Hello

手順書による「一子相伝」

属人化の排除 ライブラリ依存関係の自動解決

めいゔぃん (達人という意味)

13年6月3日月曜日

Page 4: Mavenへのはじめの一歩

Mavenが現れた背景Jakarta Turbinプロジェクトにおいて、関連するライブラリやbuild.xmlの管理が煩雑になったため。

Mavenの一連のライフサイクルフェーズ(いくつかのゴールをまとめた単位)でビルドを実行•plugin ; Mavenの機能をインストール•dependency ; プロジェクトに必要なライブラリをインストール

APACHE MAVANについて

ローカルリポジトリ

compile, test, packageを経てできたjarをインストールセントラルリポジトリ,

サードパーティリポジトリ

関連するjarをインストール

install = compile + test + package + ローカルリポジトリにデプロイinstall = compile + test + package + ローカルリポジトリにデプロイ

installpackagetestcompileclean

install = compile + test + package + ローカルレポジトリにデプロイpackage = compile + test + パッケージングtest = compile + 単体試験の実行compile = コンパイル

13年6月3日月曜日

Page 5: Mavenへのはじめの一歩

HELLO MAVEN

$ mvn --versionUnable to find a $JAVA_HOME at "/usr", continuing with system-provided Java...Apache Maven 3.0.5 (省略)

$ echo “export JAVA_HOME=/pass/to/your/JAVA_HOME >> ~/.bashrc$ source ~/.bashrc$ echo $JAVA_HOME$ mvn archetype:generate ¥-DgroupId=com.mycompany.app ¥-DartifactId=FirstApp ¥-Dversion=1.0.0-SNAPSHOT ¥-DarchetypeArtifactId=maven-archetype-quickstart ¥-DinteractiveMode=false

プロジェクトを作った組織を識別するIDプロジェクト名

プロジェクトのバージョン名プロジェクトのひな形タイプ

対話的にプロジェクトをつくらない

1. Mavenがインストールされていることを確認する

2. Mavenで新規プロジェクトを作成する

13年6月3日月曜日

Page 6: Mavenへのはじめの一歩

ディレクトリ構成 ディレクトリ構成を確認する プロパティファイルのディレクトリとして、main/resourcesおよびtest/resourcesを追加するFirstApp├── pom.xml ビルド時の依存関係や生成した成果物の扱いなどを記載└── src ├── main ソースコードを格納するターゲットディレクトリ │ └── java │ └── com パッケージ空間 │ └── mycompany │ └── app │ └── App.java └── test テストコードを格納するターゲットディレクトリ └── java └── com └── mycompany └── app └── AppTest.java

13年6月3日月曜日

Page 7: Mavenへのはじめの一歩

パッキングしてみよう パッケージしてみる mvn packageでコンパイル、テスト、パッケージといった一連のプロセスが実行される

$ cd FirstApp$ mvn clean package

…(省略)…

------------------------------------------------------- T E S T S-------------------------------------------------------Running com.mycompany.app.AppTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ FirstApp ---[INFO] Building jar : /Users/hermesian/dev/java/FirstApp/target/FirstApp-1.0.0-SNAPSHOT.jar[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 4.248s[INFO] Finished at: Wed May 01 13:48:59 JST 2013[INFO] Final Memory: 18M/140M[INFO] ------------------------------------------------------------------------

13年6月3日月曜日

Page 8: Mavenへのはじめの一歩

ECLIPSEプロジェクトにしてみよう

$ ls - l FirstApp/targettotal 8-rw-r--r-- 1 hermesian staff 2304 5 1 13:48 FirstApp-1.0.0-SNAPSHOT.jardrwxr-xr-x 3 hermesian staff 102 5 1 13:48 classesdrwxr-xr-x 3 hermesian staff 102 5 1 13:48 maven-archiverdrwxr-xr-x 2 hermesian staff 68 5 1 13:48 surefiredrwxr-xr-x 4 hermesian staff 136 5 1 13:48 surefire-reportsdrwxr-xr-x 3 hermesian staff 102 5 1 13:48 test-classes$ cd FirstApp/target$ java -cp target/FirstApp-1.0.0-SNAPSHOT.jar com.mycompany.app.AppHello World!

$ cd FirstApp$ mvn eclipse:eclipse

4. 作成したプロジェクトをEclipseプロジェクにする•これにより.classpathや.projectが作成されるので、Eclipseから既存Mavenプロジェクトとしてインポートすれば良い

3. パッケージしたjarの動作を確認する

13年6月3日月曜日

Page 9: Mavenへのはじめの一歩

MAVENから実行してみよう5. mainメソッドが記載されているクラスを-Dexec.mainClassで指定する

$ mvn clena compile exec:java -Dexec.mainClass=com.mycompany.app.App[INFO] Scanning for projects......(省略)...

Hello World![INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.254s[INFO] Finished at: Sat May 18 15:39:01 JST 2013[INFO] Final Memory: 5M/81M[INFO] ------------------------------------------------------------------------

6. 毎回引数で面倒なのでpom.xmlで設定する• MavenにExec Mavenプラグインを追加し、実行する

•Exec Maven Plugin : http://mojo.codehaus.org/exec-maven-plugin/

13年6月3日月曜日

Page 10: Mavenへのはじめの一歩

<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.mycompany.app.App</mainClass> </configuration> </plugin> </plugins>

$ mvn exec:java

(結果は先ほどと同様なので省略)

• pom.xmlに以下を追記する

• exec:javaで実行できる

ゴールとしてexec:javaを使用

mainメソッドのあるクラスを指定

13年6月3日月曜日

Page 11: Mavenへのはじめの一歩

今度はWEBアプリケーション7. archetypeArtifactIdとして、maven-archetype-webappを指定する

$ echo “export JAVA_HOME=/pass/to/your/JAVA_HOME >> ~/.bashrc$ source ~/.bashrc$ echo $JAVA_HOME$ mvn archetype:generate ¥-DgroupId=com.mycompany.app ¥-DartifactId=FirstWebApp ¥-Dversion=1.0.0-SNAPSHOT ¥-DarchetypeArtifactId=maven-archetype-webapp ¥-DinteractiveMode=false

archetypeArtifactIdを指定

8. できたプロジェクトのディレクトリ構成を確認しよう足りないディレクトリは足すこと(src/main/java, src/test/java, src/test/resourcesFirstWebApp├── pom.xml

└── src

└── main

├── resources

└── webapp

├── WEB-INF

│   └── web.xml

└── index.jsp13年6月3日月曜日

Page 12: Mavenへのはじめの一歩

APACHE TOMCATの管理者を設定する9. Apache Tomcat Maven Pluginを使って、Mavenにwarファイルをデプロイする

<tomcat-users><role rolename=”manager-gui”/><role rolename=”manager-script”/><user username=”admin” password=”admin00” roles=”manager-gui,manager-script”/>

</tomcat-users>adminというユーザを作る

• Tomcat7 (今回は7.0.40を使用)で管理ユーザを作る$CATALINA_HOME/conf/tomcat-user.xml

• Tomcatを再起動し、管理ページに入れることを確認する

ブラウザからhttp://localhost:8080/managerに接続する

13年6月3日月曜日

Page 13: Mavenへのはじめの一歩

APACHE TOMCATにデプロイする10. Mavenの設定(settings.xml)にTomcatの管理者の設定を追記する

<settings><servers>

<server><id>tomcat7</id><username>admin</username><password>admin00</password>

</server></servers></settings>

“tomcat7”という識別子を設定

~/.m2/settings.xml

11. pom.xmlにTomcatへのダプロイを設定する <build> <finalName>FirstWebApp</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.0</version> <configuration> <server>tomcat7</server> <url>http://localhost:8080/manager/text</url> <path>/${project.build.finalName}</path> <update>true</update> </configuration> </plugin> </plugins> </build>

“tomcat7”という識別子を設定デプロイは/manager/text/deploy?path=/FirstWebAppで指定.warの名前を指定(上部の<finalName>で指定されている)

<update>で更新を指定していないと再度デプロイできない

13年6月3日月曜日

Page 14: Mavenへのはじめの一歩

デプロイされていることを確認しよう12. MavenからTomcatにデプロイする

$ mvn tomcat7:deploy...(省略)...

[INFO] tomcatManager status code:200, ReasonPhrase:OK[INFO] OK - コン????ストパス /FirstWebApp でアプリケーションを??備しました[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 4.130s[INFO] Finished at: Sun May 19 20:17:57 JST 2013[INFO] Final Memory: 9M/81M[INFO] ------------------------------------------------------------------------

Tomcatに配備完了(文字化けしちゃってる...)

13.デプロイされていることを確認しよう

ブラウザからhttp://localhost:8080/managerに接続する

Fin.13年6月3日月曜日