关于java文件打包的用法

author: scruffybear

release time: 23/10/2006

company: Watchdata

前面谈到过在tomcat下运行servlet的方法,在运行servlet时可以打包成以*.war为格式的压缩文件,把这个压缩文件放在webapp目录下,再进行适当地配置,就可以使用了。*.war类似于*.jar,不管是*.war还是*.jar,我们在使用java的过程中经常会碰到关于java打包的问题,对其进行实践了以后进行总结用法写在下面。jar的全称:JavaTM Archive (JAR) file,也就是java存档文件,这有点类似zip文件,主要作用就是压缩。在命令行输入jar -help,可以得到较为详细的用法。可以得到以下信息:用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 …选项:-c 创建新的存档-t 列出存档内容的列表-x 展开存档中的命名的(或所有的〕文件-u 更新已存在的存档-v 生成详细输出到标准输出上-f 指定存档文件名-m 包含来自标明文件的标明信息-0 只存储方式;未用ZIP压缩格式-M 不产生所有项的清单(manifest〕文件-i 为指定的jar文件产生索引信息-C 改变到指定的目录,并且包含下列文件:如果一个文件名是一个目录,它将被递归处理。清单(manifest〕文件名和存档文件名都需要被指定,按’m’ 和 ‘f’标志指定的相同顺序。示例1:将两个class文件存档到一个名为 ‘classes.jar’ 的存档文件中:jar cvf classes.jar Foo.class Bar.class示例2:用一个存在的清单(manifest)文件 ‘mymanifest’ 将 foo/ 目录下的所有文件存档到一个名为 ‘classes.jar’ 的存档文件中:jar cvfm classes.jar mymanifest -C foo/ .用法已经有了,现具体使用方法举例如下:在文件目录下建立Frame1.java文件,内容如下,执行效果是生成一个窗口:package snake; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Frame1{ public static void main(String[] args) { JFrame frame = new JFrame (); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit(0); } }); frame.setVisible(true); } } 用Jcreator4.0进行编译运行,正常。有两种方法进行打包:一种是正确书写manifest.mf, 使用jar命令打包后,再使用java -jar命令即可正确执行。另外一种方法是不正确书写manifest.mf,使用jar命令打包后,再使用winrar解压缩软件将/META-INF/MANIFEST.MF中的内容修改为正确的,现将两种方法分别做一下介绍:方法一:正确内容创建manifest.mf(名字可以随便取).在目录下建立manifest.mf文件,文件内容严格按照规定的格式书写。如下:Created-By: huilin.xiongMain-Class: snake.Frame1注意Creat-By:和Main-Class:后面都要有个空格。最后还要在Frame1后加上一个回车。不加不能正确生成/META-INF/MANIFEST.MF,这个我试过了。是个巨大的陷井,真BT!Main-Class主要是指示压缩文件中的主类是什么,这样就可以在运行解压缩时找到主类对象进行执行。在命令行中输入:jar cvfm snake.jar manifest.mf snake,压缩生成了snake.jar.最后在命令行中执行:java -jar snake.jar 正常显示了窗口。这个方法比较好,但是要正确创建manifest.mf方法二:不正确内容创建manifest.mf(名字可以随便取).在目录下建立manifest.mf文件,文件内容任意,暂且写入:Main-Class: snake.Frame1在命令行中输入:jar cvfm snake.jar manifest.mf snake,压缩生成了snake.jar.用winrar打开发现除了snake文件夹以外,还有一个文件夹,那就是META-INF,用编辑器工具打开(我用ultra edit),里面有一个MENIFEST.MF,其文件内容如下:Manifest-Version: 1.0Created-By: 1.6.0-beta (Sun Microsystems Inc.) 在后面加上:Main-Class: snake.Frame1并进行保存。 表示主类是snake.Frame1,所以在解压执行时可以找得到主类对象进行运行。接下来,我们在命令提示符里执行更新命令(这一操作或许不需要):jar umf MANIFEST.MF snake.jar这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新,可以再进去看看是不是添上了Main-Class: Frame1这一句。最后在命令行中执行:java -jar snake.jar 正常显示窗口。 这个方法比较省事,避免很多格式陷阱。我们再来看看jar文件在tomcat中发布注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的:先准备我们要打包的资源,这里与先前谈到的运行servlet类似,其实不用介绍,直接去参考那篇《Tomcat下运行servlet》即可,这里简述。⑴、找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello⑵、再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml,注意是同级,不是在classes下面。这样就初步建立了一个简单的web应用。编译HelloWorld.java,生成HelloWorld.class放在classes目录下:import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet{public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {response.setContentType("text/html"); PrintWriter out = response.getWriter();out.println("<html><head><title>");out.println("This is my first Servlet");out.println("</title></head><body>");out.println("<h1>Hello,World!</h1>");out.println("</body></html>"); } } ⑶、编写web.xml:<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC’-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”http://java.sun.com/j2ee/dtds/web-app_2_3.dtd’><web-app><servlet><servlet-name>hello</servlet-name><servlet-class>HelloWorld</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/HelloWorld</url-pattern></servlet-mapping></web-app>⑷、生成war包:在命令提示符下进到先前创制的hello目录下,执行 jarcvfhello.war*//我们便得到hello.war。将它拷贝至webapps目录下,⑸、打开tomcat的目录conf中的server.xml,加入:<Context path="/hello" docBase="hello.war" debug="0"reloadable="true"/>最后启动tomcat,后在浏览器中输入<http://localhost:8080/hello/HelloWorld>一个硕大的HelloWorld就出现了。:)

从一开始就提醒自己,世上没有后悔药吃。

关于java文件打包的用法

相关文章:

你感兴趣的文章:

标签云: