1. WIN 下执行 java 单文件
1. class
方式
1. 编写程序,保证 import 正确
1 2 3 4
| public class Hello{ public static void main(String[] args){ System.out.println("Hello World"); }
|
2. 编译
在文件所在文件夹,使用 javac
,可生成 class
文件
3. 执行
执行 class
文件
2. jar
方式
1. 编写程序,同上
2. 编译
打包 jar
文件时,必须增加清单文件,首先在该文件目录下新建一个 manf
的文件清单,内容为指定主类
1 2 3
| # manf Main-Class: Hello
|
注意清单文件的规范,在冒号后面要有一个空格,行末不能有空格,最后一行是空行
1
| > jar cvfm Hello.jar manf Hello.class
|
3. 执行
打包之后会生成一个 Hello.jar
文件,执行
2. 引用 class 文件打包
文件结构
1 2 3
| │ Hello.java ├─test │ │ Gen.java
|
1. 编写程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # Hello.java import test.Get; public class Hello{ public static void main(String[] args){ Get aget=new Get(); aget.print(); } }
# Get.java package test; public class Get{ public void print(){ System.out.println("Good Job"); } }
|
2. 编译
在 Hello.java
中 import test.Get
中将 test
作为包处理,所以需要在该文件中加上 package test
才能编译成功
1
| > jar cvfm Hello.jar manf Hello.class test/Get.class
|
3. 执行
3. 引用 jar 打包
文件结构同上,但删除 test
及其下文件
1. 编译
当我们编译 Hello.java
时报错,因为找不到 test
包下面的 Get.class
的文件,但是 Hello.jar
内有 test.Get
,因此打包时候需要将其引进来
1 2
| # -cp:在java文件中,引入其他的jar包,多个jar包用分号隔开 > javac -cp Hello.jar Hello.java
|
此时会生成 Hello.class
文件,但执行需要增加 classpath
参数
1 2
| # -classpath:要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类 > java -classpath Hello.jar Hello
|
在清单文件中指明类加载路径,将 jar
的路径包含进来,避免找不到类的错误
1 2 3 4
| # manf Main-Class: Hello Class-Path: Hello.jar
|
打包
1
| > jar cvfm a4.jar manf Hello.class
|
2. 执行
注意
Main-Class
中类如果有限定名,则写成全限定名,比如 package.classname
Class-Path
中引用多个 jar
包,则以换行分隔多个jar
包的相对路径
4. Linux 下执行 jar 文件
1. java - jar
执行该命令时,会用到目录 META-INF\MANIFEST.MF
文件,在该文件中,有一个叫 Main-Class
的参数,它说明了 java -jar
命令执行的类
2. java -cp
指定类运行所依赖其他类的路径,通常是类库、jar
包之类,需要全路径到jar
包,表达式支持通配符
1
| java -cp (jar包路径:...) (主类的全限定名称) (参数)
|