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