Index > 自作のウェブアプリケーションの配布を簡単にするためにjettyを使う
Sat, March 25, 2006

自作のウェブアプリケーションの配布を簡単にするためにjettyを使う

jettyは組み込んで使用されることが想定された設計になっているので 自作のウェブアプリケーションに組み込むことが簡単にできる。

jetty を埋め込む

次のコードを使えば、java -jar myapp.jar の形で実行できる配布パッケージをつくることができる。

Main.java

import java.io.File;
import org.mortbay.jetty.Server;
import org.mortbay.http.SocketListener;

public class Main {

    private static Server jettyServer;

    public static void main(String[] s) {

        int port=8080;
        if(s.length==1){
            try{
                port=Integer.parseInt(s[0]);
            }
            catch(Exception ex)
            {}
        }

        // make sure we shutdown the server nicely when the JVM is stopped
        Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                if( jettyServer.isStarted() ){
                    try{
                        jettyServer.stop();

                        File file=new File("velocity.log");
                        if(file.exists()){
                            file.delete();
                        }
                    }
                    catch(Exception ex)
                    {}
                }
            }
        });



        try{

            jettyServer = new Server();
            SocketListener li=new SocketListener();
            li.setPort(port);
            jettyServer.addListener(li);
            jettyServer.addWebApplication("/","./root/");
            jettyServer.start();
        }
        catch(Exception ex)
        {
            System.out.println(ex);
        }
    }
}

配布パッケージの作り方

STEP1 依存するjarファイルを用意する

このコードと以下のjettyに付属するjarをまとめて一つのjarにする。

STEP2 ANTを使って全体をひとつのjarにまとめる

これらjarとMain.classそれからbuild.xmlを以下のように配置して antを実行すると、実行可能なjarファイル myapp.jar を生成できる。

./build.xml
./Main.class
./lib/javax.servlet.jar
./lib/jasper-runtime.jar  
./lib/org.apache.jasper.jar
./lib/org.mortbay.jetty.jar
./lib/org.mortbay.jmx.jar


<project default="jar">
    <target name="jar" >
        <jar destfile="myserver.jar" >
            <fileset file="Main.class" />
            <zipgroupfileset dir="lib" includes="*.jar" />

            <manifest>
                <attribute name="Main-Class" value="Main" />
            </manifest>
        </jar>
    </target>
</project>

ant実行

build.xmlのあるディレクトリで ant を実行すると、myserver.jar が生成されます。

 $ ant

STEP3 自作のウェブアプリケーションを用意

servletや関連ファイルを全部含んだウェブアプリケーションをディレクトリごと mypackという作業ディレクトリにコピーします。

./mypack/myserver.jar
./mypack/root/WEB-INF/web.xml
./mypack/root/WEB-INF/lib/myServlet.jar
./mypack/root/index.html
...

※myServlet.jar は別途用意したサーブレットなどのクラスのjarです。

作動テスト

 $ cd ./mypack
 $ java -jar myserver.jar 8080

ブラウザを開いて http://localhost:8080/ で意図通り自作のウェブアプリケーションが作動するか確認します。

STEP4 パッケージをtarなどでまとめて配布用アーカイブを作成します

 $ cd ./mypack
 $ tar cf ../myapp.tar .
 $ gzip ../myapp.tar

作成した myapp.tar.gz を配布します。

 Twitter
follow me on Twitter
 Categories