JAVA基础知识之编译、运行、打包

简介: 一:java环境设置在环境变量中设置以下三个变量: JAVA_HOME=C:\j2sdk1.4.1 //可以改为相应的目录CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.

一:java环境设置
在环境变量中设置以下三个变量:

JAVA_HOME=C:\j2sdk1.4.1 //可以改为相应的目录
CLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
PATH=%JAVA_HOME%\bin;%PATH%

然后在命令行输入java -version命令,如果出现
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
则说明已经配置成功!

HelloWorld.java源程序如下:


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

在命令行执行javac HelloWorld.java
如果没有输出任何信息则说明编译成功。

在命令行运行java HelloWorld,输出:
Hello World!
代表成功执行了java程序。

 

二:初学者常犯的错误

1. 运行时,带了.class后缀
如果你试图使用如下命令:E:\java\src>java HelloWorld.class
系统会误认为你运行的是HelloWorld包下的名为class的类文件,会到系统的CLASSPATH下(一般都包括当前目录)企图寻找 HelloWorld.class.class这样的类,这样的类当然不存在了;并且也不可能存在,因为class是关键字,不能作为一个类的名字。所以会报如下错误信息:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

2. 文件名大小写错误
对于像Windows这样的系统,编译时可以不关心大小写。比如编译HelloWorld.java时,也可以使用:
E:\java\src>javac helloworld.java
也可以编译通过,但产生的类文件仍然是和源文件相符的:HelloWorld.class。
但在运行时一定要注意大小写,比如试图使用如下命令运行:
E:\java\src>java helloworld
将报类似于1中的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)

 

三:包含包层次的HelloWorld.java
比如上面的HelloWorld.java修改如下:


package org.javaresearch;
public class HelloWorld{
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

编译时有两种方法

1. 直接编译
E:\java\src>javac HelloWorld.java
此时在当前目录下输出HelloWorld.class。此时,运行不能使用上面相同的方法,使用:
E:\java\src>java HelloWorld
运行时,出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
从上述错误信息你也可以看到,系统可以找到HelloWorld类(因为当前路径包含在CLASSPATH中,具体为什么会提示wrong name,有兴趣的朋友参见Java语言规范),但这个类属于org.javaresearch包。所以,你要做的就是按照上述包层次,相应的创建目录层次,把上面生成的HelloWorld.class放到E:\java\src\org\javaresearch\目录下。运行:
E:\java\src >java org.javaresearch.HelloWorld
系统打印出:
Hello World!
这儿要注意的是,不能使用java org\javaresearch\HelloWorld来运行,此时同样会出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError:org\javaresearch\HelloWorld (wrong name: org/javaresearch/HelloWorld)

 

2. 使用 -d <directory>编译选项
是不是觉得上面的编译方法有点麻烦,能不能自动在当前路径(或任意指定的路径)下生成包层次呢?有!使用-d <directory>编译选项就能做到。
E:\java\src >javac -d . HelloWorld.java
此时,在当前目录下就生成了一个org\javaresearch目录,并且输出的.class文件也在里面。运行:
E:\java\src >java org.javaresearch.HelloWorld
系统打印:Hello World!
如果你想把生成的类文件集中存放在一个目录中,比如:E:\java\classes下,那么你首先创建这个目录,然后编译时:
E:\java\src >javac -d E:\java\classes HelloWorld.java
就可以把生成的类文件放到E:\java\classes目录下,并且按照包层次相应的创建目录路径。你可以在E:\java\classes\org \javaresearch下找到HelloWorld.class文件。此时使用如下命令可以正确运行(注意如果要用到其它类,请在CLASSPATH 中设好):
E:\java\classes >java org.javaresearch.HelloWorld

或者你可以在E:\java目录下面运行以下命令来执行
E:\java >java -classpath .\classes org.javaresearch.HelloWorld
使用java的-classpath参数可以将一些目录加入类路径

 

四:打包jar文件
可以把一个包内的所有class文件打包为一个jar文件,便于存放和运行。以上文的org.javaresearch包为例,其打包命令如下:
E:\java\classes >jar cvf wxb.jar org
会生成一个wxb.jar文件,将其中META-INF\MANIFEST.MF文件中添加如下一行:
Main-Class: org.javaresearch.HelloWorld
保存jar文件。

或者首先创建并编辑一个MANIFEST.MF文件,其内容如下:
Manifest-Version: 1.0
Created-By: 1.4.1 (Sun Microsystems Inc.)
Main-Class: org.javaresearch.HelloWorld
将其保存到classes目录中
然后将其一起打包到jar文件中,打包命令如下:
E:\java\classes >jar cvfm wxb.jar MANIFEST.MF org

 

五:Eclipse导出jar

第一:普通类导出jar包,我说的普通类就是指此类包含main方法,并且没有用到别的jar包。
1.在eclipse中选择你要导出的类或者package,右击,选择Export子选项;
2.在弹出的对话框中,选择java文件---选择JAR file,单击next;
3.在JAR file后面的文本框中选择你要生成的jar包的位置以及名字,注意在Export generated class files and resources和Export java source files and resources前面打上勾,单击next;
4.单击两次next按钮,到达JAR Manifest Specification。注意在最底下的Main class后面的文本框中选择你的jar包的入口类。单击Finish,完成。
你可以在dos环境下,进入你的jar所在的目录,运行 java -jar 名字.jar,检测运行是否正确。
第二、你所要导出的类里边用到了别的jar包。比如说你写的类连接了数据库,用到数据库驱动包oracl.jar.。
1.先把你要导出的类按照上面的步骤导出形成jar包,比如叫test.jar
2.新建一个文件夹main,比如在D盘根目录下;
3.把test.jar和oracl.jar拷贝到main文件下,右击test.jar,解压到当前文件夹。把META-INF\MANIFEST.MF剪切到另外一个地方 (比如是桌面!) ;
4.右击oracl.jar,解压到当前文件夹。
5.在dos环境下,进入到D盘的main文件夹下,执行 jar cvfm new.jar meta-inf/manifest.mf .,不要忘了最后面的点。
6.用压缩工具打开你新生成的new.jar,用你放在桌面的META-INF\MANIFEST.MF覆盖new.jar原有。
你可以在dos环境下,进入你的jar所在的目录,运行 java -jar 名字.jar,检测运行是否正确。

 

六:运行jar文件
在命令行中输入如下命令即可:
E:\java\classes >java -jar wxb.jar
输出为:
Hello World!

 

七:jar,war,ear区别

这三种文件都可以看作是java的压缩格式,其实质是实现了不同的封装:

jar--封装类
war--封装web站点
ear--封装ejb。
它们的关系具体为:
jar:      是java Achieve--按java格式压缩的类包,包含内容 class、properties文件,    是文件封装的最小单元 级别:小
war:     是file web Achieve--包含Servlet、JSP页面、JSP标记库、JAR库文件HTML/XML文档和其他公用资源文件,如图片、音频文件等 级别:中
ear:    是 file Enterprise Achieve--除了包含JAR、WAR以外,还包括EJB组件   部署文件 application-client.xml web.xml application.xml    级别:大

 

参考:http://www.cnblogs.com/itech/archive/2010/04/06/1705556.html

Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
1月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
116 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
22天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
29 4
|
25天前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
1月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
25 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
1月前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
|
1月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
47 2
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
44 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
Java C++
做了个Java打包工具,可以双击启动了!
本文介绍了作者日常使用Java和Swing进行开发的经验,以及Java程序分发时遇到的问题,如需要JRE环境。文中列举了几种常见的Java程序打包方法,并对比了各自的优缺点,最后作者结合这些方案,利用Winform开发了一款工具,将Java程序打包成二进制可执行文件,简化了分发流程。
做了个Java打包工具,可以双击启动了!
|
1月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
105 4
|
1月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
122 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
下一篇
无影云桌面