我在路径 C:\learn\db\base\mine 上有 java - 类 Main2
类本身看起来像这样
package base.mine;
public class Main2{
public static void main(String[] args){
List<Animal> a = new ArrayList<>();
a.add(new Animal("kingoroo", true, false, true));
a.add(new Animal("snake", false, true, false));
a.add(new Animal("fox", true, false, true));
print(a, new HopeChecker());
print();
print(a, new HairsChecker());
print();
print(a, new SwimChecker());
}
private static void print(){
System.out.println();
}
private static void print(List<Animal> a, Checker checker){
for (Animal item: a){
if (checker.test(a)){
System.out.println(item.getName());
}
}
}
}
/* kingoroo fox */
/* kingoroo fox */
/* snake */
如果我尝试使用命令行从项目根目录构建项目,则会出现错误
也就是说,从目录
C:\学习\数据库>
我这样跑
C:\learn\db>javac -cp "C:\learn\db\base\mine" Main2.java
我看到了这个错误
C:\learn\db>javac -cp "C:\learn\db\base\mine" Main2.java
javac: file not found: Main2.java
Usage: javac <options> <source files>
use -help for a list of possible options
为什么不编译?
编译文件:
从源代码编译类时(使用控制台实用程序
javac),您必须指定它的路径(相对或绝对)。您使用绝对路径的示例:
javac -d target C:/learn/db/base/mine/HelloWorld.java您的示例使用相对路径(相对于您的目录
package在 named 中base):javac -d target ./base/mine/HelloWorld.java在上面的例子中,编译后的文件(
.class-files)将被放到一个名为target(-d target)的目录中,建议避免混淆源代码和构建结果(字节码)。您做错了什么:值得注意的是,您在编译时尝试使用参数
-cp(aka-classpath),但此参数仅用于指定依赖项(包含您在代码中使用的非您编译的类的工件,例如工件可能是一个.jar-file 或包含.class-files 的目录,包括根据它们package的嵌套)。运行编译后的文件:
要运行编译后的文件(使用控制台实用程序
java),您必须指定执行程序集的目录的路径(在我们的例子中是-classpath ./target,或-cp ./target):java -classpath ./target base.mine.HelloWorld读什么:
为了更全面地了解正在发生的事情,您应该阅读在 Java 中使用控制台实用程序的基本手册,这篇文章很可能适合您。