J2EE打造可執行war包

jopen 10年前發布 | 60K 次閱讀 J2EE Jetty 應用服務器

1. 使用Jetty為嵌入式服務器; 2. 使用ant將web應用打包為runnable.war; 3. 命令行java -jar runnable.war啟動web服務。

1.  下載jetty

注意: Jetty 9.x 需要 JDK 1.7 支持。下表是Jetty各版本狀態一覽。

版本 JDK版本
Servlet JSP 狀態
9.0 1.7 3.0 (3.1 on branch) 2.2 穩定
8.x 1.6 3.0 2.2 成熟
7.x 1.5,
J2ME
2.5 2.1 成熟
6.x 1.4-1.5 2.5 2.0 過時

下載地址: http://download.eclipse.org/jetty/

2.   啟動類

package net.codaview;

import java.io.File;
import java.net.URL;
import java.security.ProtectionDomain;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class EmbeddedServer {

    public static void main(String[] args) throws Exception {
        int port = Integer.parseInt(System.getProperty("port", "8080"));
        Server server = new Server(port);

        ProtectionDomain domain = EmbeddedServer.class.getProtectionDomain();
        URL warLocation = domain.getCodeSource().getLocation();

        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setDescriptor(warLocation.toExternalForm() + "/WEB-INF/web.xml");
        webapp.setServer(server);
        webapp.setWar(warLocation.toExternalForm());
        String tempDir = new File(warLocation.getPath()).getParent() + "/tmp";
        webapp.setTempDirectory(new File(tempDir));

        server.setHandler(webapp);
        server.start();
        server.join();
    }
}

 

3.   ant腳本

<project>
    <target name="war">
        <!-- web根路徑 -->
        <property name="webapp.dir" location="${basedir}/webapp" />
        <!-- jetty  -->
        <property name="jetty.dir" location="${basedir}/webapp/WEB-INF/jetty" />
        <!-- 臨時目錄 ,放置打包過程中產生的文件 -->
        <property name="temp.dir" location="${basedir}/temp" />

        <!-- 創建臨時目錄 -->
        <mkdir dir="${temp.dir}" />
        
        <!-- 拷貝web下所有文件到臨時目錄 -->
        <copy todir="${temp.dir}">
            <fileset dir="${webapp.dir}">
                <exclude name="WEB-INF/jetty/*" />
                <exclude name="WEB-INF/tmp/*" />
            </fileset>
        </copy>
        
        <!-- 解壓jetty -->
        <unjar dest="${temp.dir}">
            <fileset dir="${jetty.dir}">
                <include name="jetty-continuation-7.6.9.v20130131.jar" />
                <include name="jetty-http-7.6.9.v20130131.jar" />
                <include name="jetty-io-7.6.9.v20130131.jar" />
                <include name="jetty-jmx-7.6.9.v20130131.jar" />
                <include name="jetty-security-7.6.9.v20130131.jar" />
                <include name="jetty-server-7.6.9.v20130131.jar" />
                <include name="jetty-servlet-7.6.9.v20130131.jar" />
                <include name="jetty-util-7.6.9.v20130131.jar" />
                <include name="jetty-webapp-7.6.9.v20130131.jar" />
                <include name="jetty-xml-7.6.9.v20130131.jar" />
                <include name="annotations-api-6.0.37.jar" />
                <include name="catalina-6.0.37.jar" />
                <include name="ecj-4.2.2.jar" />
                <include name="el-api-6.0.37.jar" />
                <include name="jasper-6.0.37.jar" />
                <include name="jasper-el-6.0.37.jar" />
                <include name="javax.servlet.jsp-api-2.2.1.jar" />
                <include name="jsp-api-6.0.37.jar" />
                <include name="juli-6.0.37.jar" />
                <include name="servlet-api-6.0.37.jar" />
            </fileset>
            <patternset>
                <exclude name="META-INF/**/*" />
                <exclude name="images/**/*" />
                <exclude name=".options" />
                <exclude name="about.html" />
                <exclude name="jetty-dir.css" />
                <exclude name="jdtCompilerAdapter.jar" />
                <exclude name="plugin*" />
            </patternset>
        </unjar>

        <!-- 復制啟動類 -->
        <copy todir="${temp.dir}">
            <fileset dir="${webapp.dir}/WEB-INF/classes" includes="net/codaview/EmbeddedServer.class" />
        </copy>

        <!-- 創建war包 -->
        <war destfile="runnable.war" webxml="${webapp.dir}/web.xml">
            <fileset dir="${temp.dir}" includes="**/*" />
            <classes dir="${webapp.dir}/WEB-INF/classes" />
            <lib dir="${webapp.dir}/WEB-INF/lib" />
            <manifest>
                <attribute name="Main-Class" value="net.codaview.EmbeddedServer" />
            </manifest>
        </war>

        <!-- 刪除臨時目錄 -->
        <delete dir="${temp.dir}" />
    </target>
</project>

 

4. 運行

java -jar runnable.war

 

5. 來源 stackoverflow

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!