含有package的源代码的编译以及打包

package首字母小写!
public首字母小写!

1.文件目录和源代码

在这里插入图片描述
在D盘中新建test文件夹,在test文件夹下新建如上四种成分,其中foo文件夹为空
三个java文件的源代码如下所示:
Main.java

package cn.mymain;
import cn.mytest1.Test1;
import cn.mytest2.Test2;
public class Main{
	public static void main(String[] args){
		for(String item:args){
			System.out.println("parameters are:"+item);
}
		Test1 t1=new Test1();
		Test2 t2=new Test2();
		t1.say();
		t2.say();
}
	

}

Test1.java

package cn.mytest1;
public class Test1{
	public static void main(String[] args){

}
	public void say(){
	System.out.println("I am Test1!");
}
}

Test2.java

package cn.mytest2;
public class Test2{
	public static void main(String[] args){

}
	public void say(){
	System.out.println("I am Test2!");
}
}

接下来开始编译

2.利用javac指令编译源文件为class文件

D:\test>javac -d ./foo Test1.java

D:\test>javac -d ./foo Test2.java

-d ./foo 指定生成的class文件的路径
比如Test1.java中的package cn.mytest1;
那么编译之后就会在foo文件夹下生成cn文件夹,cn文件夹下回生成mytest1文件夹,
最后的Test1.class保存在mytest1文件夹中
如下图所示:
在这里插入图片描述
Tess2.java以此类推
在这里插入图片描述
但是当我对Main.java进行上述编译时
报了相关错误:

D:\test>javac -d ./foo Main.java
Main.java:2: 错误: 程序包cn.mytest1不存在
import cn.mytest1.Test1;
                 ^
Main.java:3: 错误: 程序包cn.mytest2不存在
import cn.mytest2.Test2;
                 ^
Main.java:9: 错误: 找不到符号
                Test1 t1=new Test1();
                ^
  符号:   类 Test1
  位置: 类 Main
Main.java:9: 错误: 找不到符号
                Test1 t1=new Test1();
                             ^
  符号:   类 Test1
  位置: 类 Main
Main.java:10: 错误: 找不到符号
                Test2 t2=new Test2();
                ^
  符号:   类 Test2
  位置: 类 Main
Main.java:10: 错误: 找不到符号
                Test2 t2=new Test2();
                             ^
  符号:   类 Test2
  位置: 类 Main
6 个错误

一句话,找不到class在哪
通过查看相关博客
我尝试使用classpath(即class的path,亲身经历印象更深刻)

D:\test>javac -classpath ./foo -d ./foo Main.java

D:\test>

我觉得classpath的作用就是引导编译器去哪里寻找程序中需要用到的class文件
我这里之所以用./foo
是因为Test1.class和Test2.class的全称(如cn.mytest1.Test1和cn.mytest2.Test2)都在其下
在这里插入图片描述
在这里插入图片描述

3.利用jar命令打包

step1:先在java文件同级目录新建MANIFEST.MF文件
输入如下字符:

Manifest-Version: 1.0
Created-By: 10.0.2 (Oracle Corporation)
Main-Class: cn.mymain.Main

在这里插入图片描述
MANIFEST.MF文件最后一行是空行
用记事本看不出来
用notepad++即可

step2:开始打包

D:\test>jar cvfm test.jar MANIFEST.MF -C foo/ .
已添加清单
正在添加: cn/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: cn/mymain/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: cn/mymain/Main.class(输入 = 1079) (输出 = 621)(压缩了 42%)
正在添加: cn/mytest1/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: cn/mytest1/Test1.class(输入 = 471) (输出 = 307)(压缩了 34%)
正在添加: cn/mytest2/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: cn/mytest2/Test2.class(输入 = 471) (输出 = 307)(压缩了 34%)

从效果来看把foo文件夹下的所有的东西和MANIFEST.MF一起打包成test.jar文件
test.jar文件保存在当前目录

step3: 测试jar包是否可以运行

D:\test>java -jar test.jar
I am Test1!
I am Test2!

D:\test>java -jar test.jar 1 2 3 4
parameters are:1
parameters are:2
parameters are:3
parameters are:4
I am Test1!
I am Test2!

D:\test>

参考网址1

4.java程序调用其他的jar包

step1
编写源代码Extra1.java,调用jar包中的类 Test1

package china.myextra1;
import cn.mytest1.Test1;
public class Extra1{
	public static void main(String[] args){
		Test1 t1=new Test1();
		t1.say();
}
}

step2
编译该代码

D:\test\Extra>javac -cp ../test.jar -d . Extra1.java

cp必须要加,否则就不知道在找class
在Extra.java同级文件夹生成china文件夹,china文件夹下生成myextra1文件夹,
myextra1文件夹下生成Extra1.class

step3
运行该代码

D:\test\Extra>java -cp ../test.jar; china.myextra1.Extra1
I am Test1!

上面的分号必须要加上,否则就报错
上面的cp也得加上,否则也报错
上面的类名得用完整名称,否则也报错
路径图如下所示:

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值