java类路径中,/*和./*之间有什么不同
在java类路径中,/*和./*之间有什么不同,java,Java,在/home/wangming目录中,我编写了一个简单的java源代码Test.java 导入com.alibaba.fastjson.JSONObject; 导入java.util.concurrent.TimeUnit; 公开课考试{ 公共静态void main(字符串[]args)引发InterruptedException{ JSONObject json=新的JSONObject(); 时间单位。小时。睡眠(1); } } 我将fastjson-1.2.11.jarint放入目录(类
/home/wangming
目录中,我编写了一个简单的java源代码Test.java
导入com.alibaba.fastjson.JSONObject;
导入java.util.concurrent.TimeUnit;
公开课考试{
公共静态void main(字符串[]args)引发InterruptedException{
JSONObject json=新的JSONObject();
时间单位。小时。睡眠(1);
}
}
我将fastjson-1.2.11.jar
int放入目录(类路径),然后执行
[root@root王明]#javac-cp./*Test.java
javac:无效标志:./Test.class
用法:javac
使用-help获取可能选项的列表
[root@root王明]#javac-cp。Test.java
Test.java:2:错误:包com.alibaba.fastjson不存在
导入com.alibaba.fastjson.JSONObject;
^
Test.java:9:错误:找不到符号
JSONObject json=新的JSONObject();
^
符号:类JSONObject
地点:班级考试
Test.java:9:错误:找不到符号
JSONObject json=新的JSONObject();
^
符号:类JSONObject
地点:班级考试
3个错误
[root@root王明]#javac-cp.:./Test.java
Test.java:2:错误:包com.alibaba.fastjson不存在
导入com.alibaba.fastjson.JSONObject;
^
Test.java:9:错误:找不到符号
JSONObject json=新的JSONObject();
^
符号:类JSONObject
地点:班级考试
Test.java:9:错误:找不到符号
JSONObject json=新的JSONObject();
^
符号:类JSONObject
地点:班级考试
3个错误
[root@root王明]#javac-cp.:/*Test.java
只有
javac-cp.:./*Test.java
成功执行,为什么???您正在添加
,这意味着当前目录下的所有类,/*
意味着也要查看当前目录中的所有jar/zip文件
正如Jean Francois指出的那样,/*
可以单独扩展到目录中的每个文件
我强烈建议您使用IDE和maven/gradle等构建工具来设置和构建项目,您将重点放在编写代码上,而不是如何使其构建/运行。您正在添加
,这意味着当前目录下的所有类,/*
意味着查看当前目录中的所有jar/zip文件目录
正如Jean Francois指出的那样,/*
可以单独扩展到目录中的每个文件
我强烈建议您使用IDE和maven/gradle等构建工具来设置和构建项目,您将重点放在编写代码上,而不是如何使其构建/运行。问题在于Unix/Linux shell会扩展。/*扩展到与之匹配的任何内容,例如
/Test.java
做你所做的:
javac -cp .:./* Test.java
禁用shell匹配,shell不再解释通配符=>它可以工作
这意味着这也会起作用:
javac -cp "./*" Test.java
注意:在windows端没有问题,windows shell不像Linux/Un*x那样扩展通配符。问题是Unix/Linux shell会扩展。/*到任何匹配的对象,例如
/Test.java
做你所做的:
javac -cp .:./* Test.java
禁用shell匹配,shell不再解释通配符=>它可以工作
这意味着这也会起作用:
javac -cp "./*" Test.java
注意:在windows方面没有问题,windows shell没有像Linux/Un*x那样扩展通配符。我会尽量简单一些。您正在导入一个.jar文件。 因此,您必须让计算机搜索类和.jar文件才能运行您的应用程序 写入命令行时,请执行以下操作:
javac -cp . Test.java
这意味着“执行javac(编译器),使类路径成为我所在的目录,并查找.java文件(这就是“.”(点)所表示的),如果找到Test.java文件,则编译它”
当需要声明多个类路径时,应执行以下操作:
-for Windows: path1; path2; path3 (the ";" is the delimiter)
-for Unix systems: path1:path2:path3 (the ":" is the delimiter)
因此,通过写作:
javac -cp .:./* Test.java
这意味着:
-execute javac (compiler),
-make the classpath
1) the directory where I am in and look for .java files
2) + look in this directory for .jar files (that is what the "./*" represents,
-and if you found Test.java file, compile it".
这就是代码工作的原因。您要求计算机在当前目录中查找.java文件和目录中的所有.jar文件
请参阅以下文档以供参考:
类路径通配符
类路径项可以包含基名称通配符(),这被认为等同于指定目录中所有文件的扩展名为.jar或.jar的列表。例如,类路径条目mydir/指定名为mydir的目录中的所有JAR文件。由*组成的类路径项扩展为当前目录中所有jar文件的列表。无论文件是否隐藏(名称以“.”开头),都会考虑这些文件
包含星号()的类路径项与类文件不匹配。要匹配单个目录mydir中的类和JAR文件,请使用mydir:mydir/或mydir/*:mydir。选择的顺序决定了mydir中的类和资源是在mydir中的JAR文件之前加载,还是在mydir中的JAR文件之前加载
子目录不是递归搜索的。例如,mydir/*只在mydir中搜索JAR文件,而不在mydir/subdir1、mydir/subdir2等中搜索
在扩展类路径中枚举目录中的JAR文件的顺序没有指定,并且可能因平台而异,甚至在同一台机器上每时每刻都不同。构造良好的应用程序不应依赖于任何特定的顺序。如果需要特定的顺序,那么可以在类路径中显式枚举JAR文件
在类加载过程中,通配符的扩展在调用程序的主方法之前提前完成,而不是延迟。输入cl的每个元素