JDK开发工具包详解(jar.exe,javadoc.exe...)
一、JDK开发工具包详解
JDK安装完成,进入相应的JDK目录,找到bin目录,会看到很多EXE文件,这些都是JDK的开发工具和实用程序。JDK 工具库中有八种主要程序:
Javac:Java编译器,将Java源代码转换成字节码。javac HelloWorld.java
Java:Java解释器,直接从类文件执行Java应用程序字节代码。java HelloWorld
Jar:Java打包工具,主要功能是将class文件压缩和打包。
Javadoc:根据Java源码及说明语句生成HTML文档。
Appletviewer:小应用程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。运行jdb后执行help命令看帮助
javah: 可从java类生成C源代码 javah [options] classname
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:Java反汇编器,显示编译类文件中的公共域及方法,同时显示字节代码含义。 javap options classname
native2ascii.exe 将文件的本地编码字符转为Unicode码 native2ascii [option] [inputfile] [outpoutfile]
二、JAR用法:
JAR用法:
用法: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/ .
示例3: 来个小例子试试看:
我们只有一个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 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
三、javadoc标签说明
javadoc标签说明
标签 说明 JDK 1.1 doclet 标准doclet 标签类型 @author 作者 作者标识 √ √ 包、 类、接口 @version 版本号 版本号 √ √ 包、 类、接口 @param 参数名 描述 方法的入参名及描述信息,如入参有特别要求,可在此注释。 √ √ 构造函数、 方法 @return 描述 对函数返回值的注释 √ √ 方法 @deprecated 过期文本 标识随着程序版本的提升,当前API已经过期,仅为了保证兼容性依然存在,以此告之开发者不应再用这个API。 √ √ 包、类、接口、值域、构造函数、 方法 @throws异常类名 构造函数或方法所会抛出的异常。 √ 构造函数、 方法 @exception 异常类名 同@throws。 √ √ 构造函数、 方法 @see 引用 查看相关内容,如类、方法、变量等。 √ √ 包、类、接口、值域、构造函数、 方法 @since 描述文本 API在什么程序的什么版本后开发支持。 √ √ 包、类、接口、值域、构造函数、 方法 {@link包.类#成员 标签} 链接到某个特定的成员对应的文档中。 √ 包、类、接口、值域、构造函数、 方法 {@value} 当对常量进行注释时,如果想将其值包含在文档中,则通过该标签来引用常量的值。 √(JDK1.4) 静态值域
此外还有@serial、@serialField、@serialData、{@docRoot}、{@inheritDoc}、{@literal}、{@code} {@value arg}几个不常用的标签,由于不常使用,我们展开叙述,感兴趣的读者可以通过
四、JDK5.0包括的调试工具:
我们在这里对JDK5.0的调试工具做大致的概念性的介绍,然后希望通过介绍我自己在实际工作中使用这些工具解决问题的实例来让大家对这些工具有更深入的了解。
JDK5.0里面加入了jstack, jconsole, jinfo, jmap, jdb, jstat, jps, 下面对这些工具做简单介绍:
jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到 当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
jconsole – jconsole是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java程序的内存使用,Heap size, 线程的状态,类的分配状态和空间使用等等。
jinfo – jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。
jmap – jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。
jdb – jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。
jstat – jstat利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等。
jps – jps是用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。
另外,还有些其他附带的工具在这里没有列出,比如Heap Analysis Tool, kill -3 方法等等,这些在JDK5.0之前就有,同样也是非常有用的性能调优工具,大家可以参照相应的文档资料来学习,在文章后面也会推荐一些相应的文档给大家作为参考。
分享到:
相关推荐
【免费】java开发工具JDK介绍,很全,很详细的介绍。
JDK介绍 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。 EE(J2EE),enterprise edition,企业版,...
**Java新书介绍-JDK** 在Java编程领域,不断学习和掌握新的技术和工具至关重要,而JDK(Java Development Kit)作为Java开发的核心组件,始终扮演着举足轻重的角色。本篇文章将围绕一本以JDK为主题的最新图书进行...
JDK介绍** Java Development Kit(JDK)是开发和运行Java应用程序的基础软件包,由Oracle公司提供。它包含了Java编译器、Java虚拟机(JVM)、Java类库以及各种开发工具,如Java文档生成工具、调试器等。 **2. JDK...
**一、JDK介绍** Java Development Kit(JDK)是Oracle公司提供的用于开发和运行Java应用程序的工具集。JDK是Java平台的核心组件,它包含了Java编译器、Java虚拟机(JVM)、Java类库以及各种开发者工具,如Java调试...
视频教程地址:http://www.gulixueyuan.com/course/56
【免费】java开发工具JDK介绍,很全,很详细的介绍。半周心血。
本文将详细介绍如何在Linux环境下更换JDK,并进一步介绍如何更改WebLogic服务器所使用的JDK。 #### 二、Linux系统更换JDK ##### 1. 查看当前JDK安装情况 首先,需要检查当前系统是否已安装JDK以及其版本信息。 - ...
#### 二、JDK介绍 JDK是Java开发工具包的简称,它包含了Java运行环境(JRE)、Java虚拟机(JVM)以及Java工具和库文件等,是开发Java程序的基础。对于Android开发者而言,选择合适的JDK版本至关重要,因为不同的...
以上就是关于JDK 1.8.0_211的主要特性介绍。这个版本的JDK带来了许多重要的更新,极大地提升了Java开发的效率和代码质量,也是Java开发者必须掌握的关键知识。理解并熟练应用这些特性,将有助于开发者编写出更加高效...
以下将详细介绍JDK从1.6到11的主要变化和重要知识点。 **JDK 1.6**(也称为Java SE 6): 1. **改进的Swing UI**:提供了更好的图形性能和更多的组件样式。 2. **增强的集合框架**:添加了`ArrayList`和`LinkedList...
jdk1.8官方正式版下载,JDK详细介绍 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。 EE(J2EE),...
本文档将重点介绍JDK 10的主要更新,以及如何利用这些新特性进行Java开发。** ### 1. 变量类型推断(Local Variable Type Inference - JEP 286) JDK 10引入了`var`关键字,允许局部变量声明时省略类型。这使得...
在实际应用中,经常需要指定Tomcat使用的JDK路径,本文将详细介绍如何在Tomcat下指定JDK路径。 #### 二、为什么需要指定JDK路径 在部署和配置Tomcat时,指定JDK路径有以下几个重要原因: 1. **版本兼容性**:不同...
JDK详细介绍 JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。 SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。 EE(J2EE),enterprise edition,企业...
- **API文档**:详细介绍了JDK17提供的所有公共类、接口和方法,是开发人员编写代码的重要参考。 - **教程**:提供了一系列的教程,帮助新手快速上手Java编程,包括基础概念、语法和最佳实践。 - **指南和参考**:...
本文将详细介绍如何在Windows操作系统上安装JDK8,以及探讨其主要特性和应用。 **1. JDK8的下载与安装** 首先,你需要访问Oracle官方网站下载JDK8的安装包。在本例中,我们拥有名为"jdk-8u361-windows-x64.exe"的...
本文将详细介绍Oracle JDK 1.8在Linux 64位系统上的安装和使用,以及其对Java开发的重要性。 首先,JDK 1.8是Oracle公司发布的一个重要的Java版本,它引入了许多新特性和改进。例如,Lambda表达式是这个版本的一大...
本篇文章将详细介绍JDK 8的关键特性和使用方法。 1. **Lambda表达式**:这是JDK 8最显著的新特性之一,它允许函数式编程风格的代码编写。Lambda表达式可以作为参数传递,也可以作为返回值。它们简化了匿名内部类的...