日期:2014-05-16  浏览次数:20963 次

linux下含有package语句的java程序编译执行以及jar的使用、外部引用一个jar程序的编译和执行

一、

在路径~/java_study/java_code/pageTest 中有一个java文件:staticinit.java 代码如下:

package java2.java_code.pageTest;
class Bowl
{
?Bowl(int marker)
? {
?System.out.println("Bowl(" + marker + ")");
?}
?void f1()
? {
?System.out.println("Ok");
?}
?}

?class Cupboard
? {
?Bowl b1 = new Bowl(1);

?static Bowl b2 = new Bowl(2);

?Cupboard()
?{
?System.out.println("Cupboard()");
?}

?static Bowl b3 = new Bowl(3);
?}

?class Table
? {
?Table()
?{
?System.out.println("Table()");
?}
?Table(String a,int i){
?this();
?System.out.println("Ok");
?}
?}

?public class staticinit
?{
????
?static Cupboard t1 = new Cupboard();

?static Table t2;

?Bowl t3 = new Bowl(10);

?void print()
?{
?t3.f1();
?}

?public static void main(String[] args)
? {
???? new Bowl(6);
?System.out.println("Creating new Cupboard() in main");
?new Cupboard();
?System.out.println("Creating new Cupboard() in main");
?//staticinit od = new staticinit();
?//od.t3.f1();
?Table t4 = new Table("aa",1);
?}
?}

终端的当前目录为~/java_study/java_code/pageTest

环境变量为:

CLASSPATH=".:/usr/lib/jdk_6u26/java-6-sun/lib"

使用命令:

javac -d . staticinit.java

会在当前目录下生成一个java2的目录,里面包含class文件

java java2.java_code.pageTest.staticinit

可执行此程序,终端上会看见一些输出

二、

修改staticinit.java的main函数为:

public static void main2()
? {
???? new Bowl(6);
?System.out.println("Creating new Cupboard() in main");
?new Cupboard();
?System.out.println("Creating new Cupboard() in main");
?//staticinit od = new staticinit();
?//od.t3.f1();
?Table t4 = new Table("aa",1);
?}

保存,执行命令javac -d . staticinit.java

重新创建一个java文件:two.java,代码如下:

import java2.java_code.pageTest.*;
public class two
{
??? public static void main(String[] args)
??? {
??????? staticinit t = new staticinit();
??????? t.main2();
??? }
}

在two中引用staticinit。

执行命令:javac two.java后会出现如下错误:

two.java:6: 无法访问 staticinit
错误的类文件: ./staticinit.java
文件不包含类 staticinit
请删除该文件或确保该文件位于正确的类路径子目录中。
??????? staticinit t = new staticinit();
??????? ^
1 错误
这是因为 staticinit.java文件存在的缘故,把staticinit删掉即可,重新执行命令javac two.java,正常

再执行命令:java two,终端会有输出

三、

接一、二步骤

执行命令:

jar cvf java2.jar java2/* 将java2打包成jar包

javac -cp java2.jar two.java 编译two

java -cp java2.jar:$CLASS_PATH two 执行two

当外部引用一个jar中,有一个较简单的方法,就是将该 jar 的路径加入CLASS_PATH中,剩下的操作就和普通的包没什么多大区别了:

import //引用一个包

完成后 javac、java 即可,不需要添加别的参数

?