首页 技术 正文
技术 2022年11月16日
0 收藏 748 点赞 5,050 浏览 4771 个字

把java文件打包成.jar (jar命令详解)

先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1.1或以上版本),看到什么:   

  用法: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/ .  

 

  来个小例子试试看:

  我们只有一个HelloWorld,如下:   

  public class HelloWorld{
  public static void main(String[ ] args){
  System.out.println(“Hi, Hello World!”);
  }
  }

  
  将这个java文件存到C盘跟目录下,ok,接下来,   

  在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar   
cvf    hello.jar    HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar 。

  基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。   
  紧接着我们看看如何运行我们的jar包。   

  在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看:

  Manifest-Version: 1.0
  Created-By: 1.4.2 (Sun Microsystems Inc.)  

 

  就是这样。这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类,也就是我们的入口类。也即,

  Manifest-Version: 1.0
  Created-By: 1.4.2 (Sun Microsystems Inc.)
  Main-Class: HelloWorld  

  接下来,我们在命令提示符里执行:

  jar    umf   
MANIFEST.MF    app.jar  (应该是hello.jar吧) 

  这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class:
HelloWorld这一句。    (是吗,我怎么没试出来,提示java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)怎么回事?)

Ok,这个最后的一步了,来验证我们做的一切,在命令提示符中输入:

  java -jar hello.jar(执行)  

 

  出现了什么, Hi, Hello World!  

  我们再来看看jar文件在tomcat中发布,注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的: 

  先准备我们要打包的资源。   

  找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。  

  这是HelloWorld.java:   

  import java.io.*;
  import javax.servlet.*;
  import javax.servlet.http.*;
  public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest req,
HttpServletResponse res)
  throws ServletException, IOException {
  res.setContentType(“text/html”);
  PrintWriter out = res.getWriter();
  out.println(“”);
  out.println(“”);
  out.println(“”);
  out.println(“Hello, World!”);
  out.println(“”);
  }
  }//end here!  

  对它编译。下面是web.xml:
  <?xml version=”1.0″
encoding=”UTF-8″?>
  <!DOCTYPE web-app PUBLIC “-//Sun
Microsystems, Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/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>

在命令提示符下进到先前创制的hello目录下,执行 jar cvf hello.war * ,我们便得到hello.war。将它拷贝至webapps目录下,ok,来看最后一步,打开tomcat的目录conf中的server.xml,加入:

  <Context path=”/hello”
docBase=”hello.war” debug=”0″
reloadable=”true”/>

  大功告成!运行它,启动tomcat,后在浏览器中输入http://localhost:8080/hello/HelloWorld,有了吗? 

  最后,如果你想用ant来完成以上的打包活动,下面就告诉你:
  对于jar来说。在build.xml中,

  <target name=”jar”>
  <jar
destfile=”${app_home}/hello.jar”>
  <fileset dir=”${dest}”
includes=”**”/>
  <!–fileset dir=”${dest}”
includes=”**/action.properties”/–>
  </jar>
  </target>  

  对于war,   

  <war warfile=”hello.war”
webxml=”./WEB-INF/web.xml”>
  <fileset dir=”html”/>
  <lib dir=”lib/”>
  <exclude name=”oracle*.jar”/>
  </lib>
  <classes dir=”build/servlets”>
  <include name=”**/*.class”/>
  </classes>
  </war>  

  好了,就这么多,希望对你有点帮助。:)

  补充: 

  jar基本操作:   

  1. 创建jar文件  

  jar cf jar-file input-file(s)
  c—want to Create a JAR file.
  f—want the output to go to a file rather than to
stdout.
  eg: 1)jar cf myjar.jar query_maintain_insert.htm
  2)jar cvf myjar.jar query_maintain_insert.htm
  v—Produces verbose(详细的)
output.

  3)jar cvf myjar.jar query_maintain_insert.htm
mydirectory
  4)jar cv0f myjar.jar query_maintain_insert.htm
mydirectory
  0—don’t want the JAR file to be compressed.
  5)jar cmf MANIFEST.MF myjar.jar yahh.txt
  m—Used to include manifest information from an
existing manifest file.
  6)jar cMf MANIFEST.MF myjar.jar yahh.txt
  M—the default manifest file should not be
produced.
  7)jar cvf myjar.jar *
  *—create all contents in current directory. 

 

  2. 察看jar文件   

  jar tf jar-file
  t—want to view the Table of contents of the JAR
file.
  eg: 1)jar vft yahh.jar
  v—Produces verbose(详细的)
output.  

  3. 提取jar文件  

  jar xf jar-file [archived-file(s)]
  x—want to extract files from the JAR archive.
  eg: 1)jar xf yahh.jar yahh.txt(仅提取文件yahh.txt)

  2)jar xf yahh.jar alex/yahhalex.txt(仅提取目录alex下的文件yahhalex.txt)  

  3)jar xf yahh.jar(提取该jar包中的所有文件或目录)  

 

  4. 修改Manifest文件  

  jar cmf manifest-addition jar-file input-file(s)
  m—Used to include manifest information from an
existing manifest file.  

  5. 更新jar文件  

  jar uf jar-file input-file(s)
  u—want to update an existing JAR file.

出处:http://wenku.baidu.com/view/82142dfa0029bd64793e2c1b.html

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898