目的:
1. 在cmd环境编译和运行一个Java程序
2. 此Java程序依赖一个外部类,即jar包
3. 将执行命令写入bat文件以方便执行
过程:
1. 定义Person类,类中包含sayHello()方法,和Walk()方法
2. 将Person类文件导出为jar包,以供Action类引用
3. 定义Action类,类中包含main()方法,main()方法中,初始化Person实例,并调用其方法
目录:
Bin: 存放被编译好的class文件
Lib:存放第三方依赖jar包
Src:存放源码文件即java文件
1. 编写Person.java打jar包放入lib文件夹中
Person.java
package demo;
public class Person {
public String SayHello(){
return "Hello World!";
}
public String Walk(){
return "I am walking!!";
}
}
打jar包命令:
Cd %cd%
Javac -cp %classpath% src\Person.java -d bin\
Jar -cvf lib\Person.jar bin\demo\Person.class
此时可在bin\demo文件夹下看到Person.class。Lib文件中看到Person.jar
编写Action文件
Action.java
//package mainTest;
import demo.Person;
public class Action {
public static void main(String[] args) {
Person p = new Person();
System.out.println(p.SayHello());
System.out.println(p.Walk());
}
}
Action.java 中不能带package信息。我认为可能因为package本身就是一种相对路径的寻址方式,调用的时候容易爆NoClassDefFound的错误。在eclipse或其他ide中 会自动管理各种文件之间的关系,所以用惯了ide之后对于这些细节本身就很容易忽略且没有头绪。
cmd编译运行Action
cd %cd%
Javac -cp .;lib\Person.jar src\Action.java -d bin\
cd bin
Java -cp .;\..\lib\Person.jar Action
解释一下:
1. %cd%意思是进入到当前目录下
2. -cp指定classpath路径。最前面的 英文点. 意思是继承系统的classpath路径,如果不继承,则classpath被重置,Java环境的一些基础类无法读取,则报错。
3. 运行的时候要进入到bin目录,否则报错。我也不知道为什。
编写bat文件
cd %cd%
del bin\*.class
set MY_CLASSPATH=.
set MY_CLASSPATH=%MY_CLASSPATH%;Person.jar
javac -cp %MY_CLASSPATH% Action.java
pause
cd bin
java -cp %MY_CLASSPATH% Action
pause