实验一、使用javac命令编译多个目录下的多个java文件
1.项目目录结构(外层目录:/software/javademo)
org>jack>demo>a>a.java
org>jack>demo>b>b.java
org>jack>demo>c>c.java
2.文件源码
/*a.java*/
package org.jack.demo.a;
public class a{
public String show(String name){
return name+",hello!(org.jack.demo.a.a.show())";
}
}
/*b.java*/
package org.jack.demo.b;
import org.jack.demo.a.a;
public class b{
public static void main(String[] args){
System.out.println("package org.jack.demo.b.b.main(String[] args)");
a _a =new a();
String str=_a.show("xiaoming");
System.out.println("str="+str);
System.out.println("ok");
}
}
/*c.java*/
package org.jack.demo.c;
public class c{
}
3.编写配置文件javacfile(/software/javademo/javacfile)
org/jack/demo/a/a.java
org/jack/demo/b/b.java
org/jack/demo/c/c.java
4.创建输出目录
[root@localhost javademo]# mkdir classes
5.编译
[root@localhost javademo]# javac @javacfile -d classes
6.查看编译后结果
[root@localhost javademo]# ls -R classes
classes:
org
classes/org:
jack
classes/org/jack:
demo
classes/org/jack/demo:
a b c
classes/org/jack/demo/a:
a.class
classes/org/jack/demo/b:
b.class
classes/org/jack/demo/c:
c.class
7.将编译后的class文件打包成普通jar(即:不可运行的jar)
[root@localhost javademo]# cd classes
[root@localhost classes]# jar cvf jack.jar *
8.运行这个普通jar
[root@localhost classes]# java -cp jack.jar org.jack.demo.b.b
输出如下:
package org.jack.demo.b.b.main(String[] args)
str=xiaominghello,(org.jack.demo.a.a.show())
ok
9.删除这个普通jar
[root@localhost classes]# rm -fv jack.jar
10.打包成可运行的jar
[root@localhost classes]# jar -cvfe jack2.jar org.jack.demo.b.b *
11.运行这个可运行的jar
[root@localhost classes]# java -jar jack2.jar
输出如下:
package org.jack.demo.b.b.main(String[] args)
str=xiaominghello,(org.jack.demo.a.a.show())
ok
12.删除这个可运行的jar
[root@localhost classes]# rm -fv jack2.jar
实验二、使用javac编译多个目录下的java文件引用已经编译好的class文件和jar包
1.准备class文件(最外层/software/javademo2)
1.1 目录结构
org/jack
a.java
b.java
1.2 文件源码
/*a.java*/
package org.jack;
public class a{
public String show(String name){
return name+",hello!";
}
}
/*b.java*/
package org.jack;
public class b{
public String show(String name){
return name+",this is org.jack.b.show(String name)";
}
}
1.3 编译这个文件到 classes_ref里
[root@localhost javademo2]# mkdir classes_ref
[root@localhost javademo2]# javac org/jack/*.java -d classes_ref
1.4 删除源码目录org
[root@localhost javademo2]# rm -rvf org
2. 准备jar包
2.1 目录结构
org>common>util.java
2.2 文件源码
/*util.java*/
package org.common;
public class util{
public int add(int x,int y){
return x+y;
}
}
2.3 编译成class文件
[root@localhost javademo2]# mkdir jar
[root@localhost javademo2]# javac -d jar org/common/util.java
2.4 将生成的class文件打包成jar包
[root@localhost javademo2]# cd jar
[root@localhost jar]# jar -cvf common.jar *
[root@localhost jar]# ls
common.jar org
2.5 将common.jar移动到lib(/software/javademo2/lib)目录下
[root@localhost jar]# mkdir ../lib
[root@localhost jar]# mv common.jar ../lib/common.jar
2.6 删除jar和org目录
[root@localhost jar]# cd ..
[root@localhost javademo2]# rm -rvf jar
[root@localhost javademo2]# rm -vrf org
3.编写代码
3.1 目录结构(最外层/software/javademo2)
classes_ref
org/jack
a.class
b.class
lib
common.jar
org/test
a.java
3.2 文件源码
/*test.java*/
package org.test;
import org.common.util;
import org.jack.a;
public class test{
public static void main(String[] args){
String name="xiaoming";
System.out.println("a.show(\"xiaoming\")="+new a().show(name));
int x=5,y=8;
int h=new util().add(x,y);
System.out.println("new util().add(x=5,y=8)="+h);
System.out.println("ok");
}
}
3.3 编译这个java文件到target目录
[root@localhost javademo2]# mkdir target
[root@localhost javademo2]# javac test.java -d target -cp classes_ref:lib/common.jar
3.4 直接运行这个class文件
[root@localhost javademo2]# cd target
[root@localhost target]# java -classpath ../classes_ref:../lib/common.jar:. org.test.test
a.show(“xiaoming”)=xiaoming,hello!
new util().add(x=5,y=8)=13
ok
3.5 将这个文件打成jar包并运行
[root@localhost target]# jar cvfe test.jar org.test.test *
[root@localhost target]# java -Xbootclasspath/a:../lib/common.jar:../classes_ref -jar test.jar
a.show(“xiaoming”)=xiaoming,hello!
new util().add(x=5,y=8)=13
ok