Upload
yuri-ohno
View
6
Download
4
Embed Size (px)
DESCRIPTION
Apache Mavenについて。 社内勉強会用に作成した資料です。
Citation preview
社内勉強会資料
へのはじめの一歩Ohno Yuri
13年6月3日月曜日
あなたの身の回りで起きていること アプリケーションの動かし方(コンパイル、テスト、実行)が作った人にしかわからない
関連するライブラリがたくさんあり、良くわからないっ!
手順書がないっ!!
Apache Mavenでビルドの見通しを良くしよう
13年6月3日月曜日
Javaのビルドツールの移り変わり
APACHE MAVENで誰でも達人
・コマンドラインからコンパイルし、実行する・-classpathで外部jarやクラスを含める
・build.xmlにビルド方法を記述する・必要なライブラリについていっしょに配布する
・pom.xmlより依存するライブ ラリを記述する・必要なライブラリはインターネット越しに取得される
$ javac Hello.java $ java Hello
手順書による「一子相伝」
属人化の排除 ライブラリ依存関係の自動解決
めいゔぃん (達人という意味)
13年6月3日月曜日
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日月曜日
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日月曜日
ディレクトリ構成 ディレクトリ構成を確認する プロパティファイルのディレクトリとして、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日月曜日
パッキングしてみよう パッケージしてみる 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日月曜日
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日月曜日
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日月曜日
<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日月曜日
今度は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日月曜日
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日月曜日
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日月曜日
デプロイされていることを確認しよう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日月曜日