JFinal 2.0 制作可执行WAR包 以及 单独可运行的 程序

原创
2015/09/23 14:03
阅读数 262

第一种制作zip吧

新建一个批处理 放在 WEB-INF 同级目录.指定 classpath [WEB-INF/classes别忘记加到classpath中 否则JFinal会找不着路径]

@echo off

java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -classpath WEB-INF/classes;WEB-INF/lib/jfinal-2.0-bin-with-src.jar;WEB-INF/lib/jetty-server-8.1.8.jar com.jfinal.core.JFinal ./ 8080 /  6000

当然你 还可以把jdk 或者  jre cp到WEB-INF  同级目录 顺便 将 批处理改成

@echo off

set JAVA_HOME=jdk1.7

set PATH=%JAVA_HOME%\BIN;%PATH%

java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -classpath WEB-INF/classes;WEB-INF/lib/jfinal-2.0-bin-with-src.jar;WEB-INF/lib/jetty-server-8.1.8.jar com.jfinal.core.JFinal ./ 8080 /  6000


这样将 web 根目录  压缩成 zip包...扔到任何地方都可运行



第二 制作可执行war包     java -jar dx.war

首先需要准备一个jetty启动类,不使用JFinal本身的启动类

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 Main {
	public static void main(String[] args) {
		int port = Integer.parseInt(System.getProperty("port", "80"));
		String context = "/";
		if (args != null && args.length != 0) {
			context = args[0];
			port = Integer.parseInt(args[1]);
		}
        Server server = new Server(port);
 
        ProtectionDomain domain = Main.class.getProtectionDomain();
        URL warLocation = domain.getCodeSource().getLocation();
 
        WebAppContext webapp = new WebAppContext();
        webapp.setThrowUnavailableOnStartupException(true);
        webapp.setContextPath(context);
        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);
        try {
        	System.out.println("Starting JFinal");
        	System.out.println("Starting web server on port: " + port);
			server.start();
			System.out.println("Starting Complete. Welcome To The JFinal World :)");
			server.join();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(100);
		}
	}
}

  使用 ant 制作 war包  配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project>
	<target name="war">
		<!--war包名字-->
		<property name="warName" location="dx.war" />
		<!-- web根路径 -->
		<property name="webapp.dir" location="${basedir}/wwwroot" />
		<!-- jetty -->
		<property name="jetty.dir" location="${basedir}/wwwroot/WEB-INF/lib" />
		<!-- 临时目录 ,放置打包过程中产生的文件 -->
		<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-server-8.1.8.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*" />
				<exclude name="about_files/" />
				<exclude name="jndi.properties" />
				<exclude name="*.log" />
			</patternset>
		</unjar>

		<!-- 复制启动类 -->
		<copy todir="${temp.dir}">
			<fileset dir="${webapp.dir}/WEB-INF/classes" includes="Main.class" />
		</copy>

		<!-- 创建war包 -->
		<war destfile="${warName}" webxml="${webapp.dir}/WEB-INF/web.xml">
			<fileset dir="${temp.dir}">
				<include name="**/*"/>
				<exclude name="*.log"/>
				<exclude name="WEB-INF/lib/jetty-server-8.1.8.jar"/>
				<exclude name="WEB-INF/lib/guava-18.0.jar"/>
				<exclude name="WEB-INF/lib/tomcat-juli.jar"/>
				<exclude name="WEB-INF/lib/calcite-linq4j-1.4.0-incubating-sources.jar"/>
			</fileset>
			<classes dir="${webapp.dir}/WEB-INF/classes" />
			<!--<lib dir="${webapp.dir}/WEB-INF/lib">
				<exclude name="jetty-server-8.1.8.jar"/>
			</lib>-->
			<manifest>
				<attribute name="Main-Class" value="Main" />
			</manifest>
		</war>

		<!-- 删除临时目录 -->
		<delete dir="${temp.dir}" />
	</target>
</project>

   生成的war包目录结构如下


现在可以运行 java -jar  xx.war了

当然你想指定 contextPath port都可以

java -jar dx.war /a  8080

还可以选择无dos窗口后台运行

javaw -jar dx.war

当然 这个 war包也可以放到tomcat下面运行

参考:http://www.open-open.com/lib/view/open1387967014812.html

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部