第一回チキチキ(略)Maven2(ry で喋って来た。

飲み会のjava-jaには一度参加したことがあったが、勉強会としてのjava-jaには初参加。EclipsePlugin開発勉強会(eclipSKY)に引き続き、初参加でスピーカーをするライフハック発動。

いやーーーー。eclipSKYの時はふつーに話せたのだが、今回は何だろうなぁ、緊張スイッチが切れなかった。話し始めればいつも余裕になるのにw 声が震えてドモドモになってもたorz アムロみたいって言われた(笑) ネタを仕込んだから「雪崩れたらどうしよう」の緊張だったと思われるw

しかしまぁ、仕込んだ点ではしっかり笑いがとれたので良しとする。というわけで、スライド公開します。フォントのレイアウトが崩れてしまっているけど、面倒なのでスルー。
他のセッション&懇親会以降のお話は、また別のエントリーで。

UStreamの録画は、以下からどうぞ(5'48" - 41'20" : 35分間ちょい)。

http://www.ustream.tv/recorded/Z9U.1K5WcsMTveiN46ElyA

以下、行ったデモの手順。この通りに行っていけば、デモを再現できるハズ。

Demo1

プロジェクト雛形を作ってpackageして実行するだけの簡単なお仕事です。
雛形にHello, world!が含まれているので、更に楽。

d:
mkdir d:\workspace
cd d:\workspace

mvn archetype:create -DgroupId=com.example -DartifactId=javaja-ex1 -DarchetypeArtifactId=maven-archetype-quickstart

cd javaja-ex1

mvn package

java -cp target/javaja-ex1-1.0-SNAPSHOT.jar com.example.App

Hello World!」と表示されて喜ぶ。

Demo2

Demo1に対して修正を加えていきます。

d:\workspace\javaja-ex1\src\main\java\com\example\App.java を以下のように修正する。

package com.example;

import org.apache.commons.lang.WordUtils;

public class App {

    public static void main(String[] args) {
        System.out.println(
                WordUtils.swapCase(“Hello, Java-ja!”));
    } 

}

pomに依存関係を書かないままコンパイルして、失敗してみる。

mvn clean
mvn compile

失敗を確認したら、pomにdependencyの記述をして、packageしてみる。

    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.3</version>
    </dependency>
mvn clean
mvn package

次に、セッションでは説明しなかったが、ここで dependency:copy-dependencies というゴールを実行している。dependencyに記述した全ての依存JAR(ここではcommons-langのみ)を、target/dependency/ にコピーしてくる、というゴールです。

それを行った上で、成果物を実行してみる。

mvn dependency:copy-dependencies

java -cp target/javaja-ex1-1.0-SNAPSHOT.jar;target/dependency/commons-lang-2.3.jar com.example.App

「hELLO, jAVA-JA!」と表示されて喜ぶ。

Demo3

cd d:\workspace

mvn archetype:create -DgroupId=com.example -DartifactId=javaja-ex3 -DarchetypeArtifactId=maven-archetype-webapp

pom.xmlに、tomcatプラグインが存在するリポジトリを指定する。

<project …>
    <pluginRepositories>
        <pluginRepository>
            <releases><enabled>false</enabled></releases>
            <snapshots />
            <id>Maven Snapshots</id>
            <url>http://snapshots.repository.codehaus.org/</url>
        </pluginRepository>
     </pluginRepositories>
</project>

tomcatプラグインの設定を行う。

<project …>
    <build>
        <plugins>
            <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>tomcat-maven-plugin</artifactId>
              <version>1.0-SNAPSHOT</version>
              <configuration>
                  <server>localhost-tomcat</server>
                  <url>http://localhost:8080/manager</url>
                  <path>/javaja-ex3</path>
              </configuration>
            </plugin>
        </plugins>
    </build>
</project>

上で指定した「localhost-tomcat」についての情報をsettings.xml に、記述する。

<setting>
    <servers>
        <server>
            <id>localhost-tomcat</id>
            <username>admin</username>
            <password>admin</password>
        </server>
    </servers>
</setting>

Tomcatを起動した上で、デプロイしてみる。

mvn tomcat:deploy

ブラウザでHello, world!を確認して喜ぶ。 → http://localhost:8080/javaja-ex3/

続いて、d:\workspace\javaja-ex3\src\main\webapp\index.jsp に、適当なJSPを記述する。ここでは、現在時刻を表示するコード。

<html>
<body>
<h2>Hello World!</h2>

<% java.util.Date nowTime = new java.util.Date(); %>
current time = <b><%= nowTime %></b>

</body>
</html>

これを再びデプロイしてみる。(undeployしてからdeploy)

mvn tomcat:undeploy
mvn tomcat:deploy

ちなみに、mavenでは複数のゴールを指定できるので、実は「mvn tomcat:undeploy tomcat:deploy」でもよい。

ブラウザで現在時刻を確認して喜ぶ。 → http://localhost:8080/javaja-ex3/