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