- 浏览: 912653 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
天天来注册:
...
try catch finally 用法 -
tadpole_java:
谢谢你的分享。
二十七、Qt数据库(七)QSqlRelationalTableModel(转) -
359449749tan:
android之EditText文本监听(addTextChangedListener) -
michael_wang:
人过留名 多谢分享
Android NOtification 使用 -
wilsonchen:
wangqi0614 写道这个删除是删除所有的把?能不能值删除 ...
Android的SharedPreferences保存与删除数据简单实例
jar文件听说过吗,没有?或者陌生!好,没关系,这就是我们的第一站:打包发布。
为什么会有这个玩意呢,首先,这是jar的全称:JavaTM Archive (JAR) file,是的,就是java存档文件。这有点类似zip文件,想一想它是干什么的用的呢,压缩!?没错就是要压缩,将我们原先零散的东西放到一下,重新组织,所有这些目的只有一个:方便!好了,不用管他是怎么压缩的,我们的重点是哪些是我们要压缩的(输入),还有压缩成了什么(输出),进而将它发布(部署)。
那我们的输入(要压缩的东西)主要是class文件,还有辅助的资源(这其中可能有图片,jsp文件,html文件等等)。Jar技术在 jdk1.1版本中就已存在,在1.2中又有了增强。接下来说说jar的好处吧,这是官方的描述:安全,快速下载,压缩,猎取包,版本化包,可携。
说了这么多,我们现在开始实施。
先打开命令提示符(win2000或在运行筐里执行cmd命令,win98为DOS提示符),输入jar –help,然后回车(如果你盘上已经有了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
这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。
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(”<HTML>”);
out.println(”<HEAD><TITLE>Hello, World!</TITLE></HEAD>”);
out.println(”<BODY>”);
out.println(”Hello, World!”);
out.println(”</BODY></HTML>”);
}
}//end here!
对它编译。下面是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目录下,执行 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>
好了,就这么多,希望对你有点帮助。:)
我上传了上面打过的两个包,hello.jar和hello.war。 『 点击下载 』
『 点击下载 』
第一rar文件对应的是hello.jar,下载后将其名改为hello.jar
第二rar文件对应hello.war,下载后改为hello.war。
这是由于上传不了jar格式和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.
为什么会有这个玩意呢,首先,这是jar的全称:JavaTM Archive (JAR) file,是的,就是java存档文件。这有点类似zip文件,想一想它是干什么的用的呢,压缩!?没错就是要压缩,将我们原先零散的东西放到一下,重新组织,所有这些目的只有一个:方便!好了,不用管他是怎么压缩的,我们的重点是哪些是我们要压缩的(输入),还有压缩成了什么(输出),进而将它发布(部署)。
那我们的输入(要压缩的东西)主要是class文件,还有辅助的资源(这其中可能有图片,jsp文件,html文件等等)。Jar技术在 jdk1.1版本中就已存在,在1.2中又有了增强。接下来说说jar的好处吧,这是官方的描述:安全,快速下载,压缩,猎取包,版本化包,可携。
说了这么多,我们现在开始实施。
先打开命令提示符(win2000或在运行筐里执行cmd命令,win98为DOS提示符),输入jar –help,然后回车(如果你盘上已经有了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
这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。
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(”<HTML>”);
out.println(”<HEAD><TITLE>Hello, World!</TITLE></HEAD>”);
out.println(”<BODY>”);
out.println(”Hello, World!”);
out.println(”</BODY></HTML>”);
}
}//end here!
对它编译。下面是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目录下,执行 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>
好了,就这么多,希望对你有点帮助。:)
我上传了上面打过的两个包,hello.jar和hello.war。 『 点击下载 』
『 点击下载 』
第一rar文件对应的是hello.jar,下载后将其名改为hello.jar
第二rar文件对应hello.war,下载后改为hello.war。
这是由于上传不了jar格式和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.
发表评论
-
判断两二叉树相等
2014-05-29 00:13 1137bool IsBSTEqual(BNode* root1, ... -
数据去重
2014-05-29 00:11 843引用 使用数据结构丰富的脚本语言,如Python,利用其中的字 ... -
判断一个整数是否为2的次方幂
2014-05-28 23:56 885/* 判断一个整数是否为2的次方幂 */ bool ... -
实现Comparable接口,进行排序
2014-05-28 23:47 8827import java.util.ArrayList; ... -
Struct2详解
2014-05-21 15:14 925引用 Servlet的缺点: 1、web.xml配置比较多 2 ... -
常用方法
2014-04-25 20:24 786[color=red]String[/color] ... -
java nio和io的比较
2014-04-16 19:49 1756引用 第一部分:简单介绍NIO 服务器在合理时间内处理 ... -
Struts2、Spring3、HIbernate4总结
2014-04-16 10:35 866引用 第一部分:Struts2 1 ... -
Finally的使用总结
2014-04-15 22:02 896//清单一: public class ... -
Fibonacci数列的递归与非递归
2014-04-15 20:57 738//非递归实现 //f(1)=1,f(2)=1,f(n) ... -
Java中的异常
2014-04-14 09:42 650引用 Throwable包括两个子类:Error和Except ... -
JVM的垃圾回收机制
2014-04-13 18:39 871引用 堆被划分为新生代和旧生代, 新生代包含Eden 和 S ... -
集合类总结
2014-04-04 15:54 672引用 一. 总的框架 总的有Collection和Map Co ... -
设计模式之策略模式
2014-04-01 17:07 632main ======================= ... -
设计模式之责任链模式
2014-04-01 16:32 750main ======================= ... -
设计模式之访问者模式
2014-03-31 18:57 869main ======================= ... -
设计模式之工厂模式
2014-03-31 11:33 642main ======================= ... -
设计模式之观察者模式
2014-03-30 15:04 869main =============== ... -
Java虚拟机JVM详解
2014-03-29 12:13 1324引用 第一部分:JVM基本结构 1.什么是JVM 一个java ... -
Java中的反射机制Reflect
2014-03-28 17:17 3618package com.reflect.sym; i ...
相关推荐
这个过程涉及到编译Java源代码、创建类路径(classpath)、构建MANIFEST.MF文件以及最终打包成JAR。下面我们将详细讲解如何编译和运行包含JAR包的Java程序。 1. **编译Java源代码** 在Java开发中,首先我们需要将....
首先,生成JAR包前需要将Java源文件编译成.class字节码文件。这可以通过Java编译器javac来完成。在上述内容中提到了使用`javac`命令,并且用到了`-d`参数来指定输出的目录。例如,`javac –d . CrazyitListener.java...
以上就是用命令行编译Java并生成可执行jar包的完整过程。需要注意的是,命令行编译和打包的过程中,每个步骤都要细心检查,确保没有任何的差错。掌握这个过程对于进行Java开发,尤其是在没有集成开发环境(IDE)支持的...
标题中的“利用bat反编译jar包生成源码jar包”指的是通过批处理脚本(BAT)配合反编译工具,将已有的Java字节码(JAR包)转换为源代码并打包成新的JAR包的过程。这个过程通常用于没有源代码但需要查看或修改JAR包...
在Java Web服务开发中,Apache Axis2是一个广泛使用的框架,它允许开发者...了解如何生成jar包和管理依赖关系对于Java Web服务开发至关重要。正确配置和使用这些工具可以有效地提高开发效率并确保服务调用的稳定性。
通过以上步骤,我们不仅学习了如何在命令行环境下编译Java源代码、创建JAR文件,而且还掌握了如何通过修改`Manifest`文件来让JAR文件能够直接运行。这种方法对于那些需要频繁构建和部署的应用来说非常实用,同时也...
下面我们将详细探讨这一过程以及如何将生成的Java类反编译为.class文件并打包到.jar文件中。 首先,让我们了解JSP到Servlet的转换过程。JSP文件本质上是HTML文件,其中可以插入Java代码。服务器上的JSP引擎在首次...
Java命令行下Jar包打包小结 Java命令行下Jar包打包小结主要介绍了Java命令行下Jar包打包小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧jar包打包实现包打包实现jar包打包可以...
Java开发过程中,打包工具起着至关重要的作用,它们帮助开发者将源代码编译、整合资源并打包成可执行的JAR文件。其中,"jarjar"是一个非常实用的工具,专为Java程序员设计,用于方便地对JAR文件进行操作,如重命名类...
3. **Procyon**: Procyon是另一个开源的Java反编译器和去混淆工具,它可以反编译Java字节码为Java源代码,并且支持Java 8的新特性。其优点在于对现代Java语法的良好支持,但相比JD-GUI,其界面友好性略逊一筹。 4. ...
通过简单的命令行操作,比如`java -jar fernflower.jar -dgs=true`,我们就能启动FernFlower并开始反编译。这里的`-dgs=true`是一个选项,它指示FernFlower在反编译过程中保留原始的类和方法名称,提高代码可读性。 ...
在Java命令行编译和运行过程中,理解并正确处理包、类的相对路径以及`classpath`的设置,对于构建复杂的Java应用程序至关重要。虽然这可能比使用IDE时更显繁琐,但它帮助开发者深入理解Java编译和运行的底层机制,...
如果"XJad"是一个工具,它可能具有与上述工具类似的特性,用于帮助开发者反编译Java字节码。如果是JAR文件,那么使用相应的反编译工具即可查看其内部结构和源代码。 总的来说,理解并熟练使用jar文件反编译工具是...
将需要反编译的APK文件放到该目录下,打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:java -jar apktool_2.2.1.jar decode test.apk (命令中test.apk指的是要反编译的APK文件全名) 之后发现在...
- **标题**:“生成JAR包的方法(打包后运行好像不快)”:该标题指出文章将介绍如何生成Java应用程序的JAR包,并提到打包后的程序运行速度较慢的问题。 #### 描述解读: - **描述**:“在练习做orcl数据库比对工具时...
在Java开发过程中,将源代码编译成可执行的...总的来说,Java生成Jar文件是一个常见的任务,理解并掌握`jar`命令的使用对于Java开发者来说非常重要。通过熟练运用这些命令,你可以更高效地管理和分发你的Java应用程序。
本篇将详细介绍"jar包反编译工具java",特别是针对描述中提到的jd-gui.exe。 首先,让我们了解什么是jar包。JAR (Java Archive) 文件是Java平台上的一个标准归档格式,它将多个类文件和其他资源打包在一起,便于...
标题“apk 反编译 java dex2jar-0.9.15”指出了使用Dex2Jar 0.9.15版本进行APK反编译的方法。这个过程分为几个步骤: 1. **APK到ZIP/RAR转换**:APK本质上是一个ZIP文件,所以你可以简单地将其重命名为.zip或.rar,...