javac(编译)和java(运行)包工作在不同的目录结构级别?

时间:2014-02-13 00:46:39

标签: java compilation classpath javac

我刚刚注意到,为了编译,我需要为我需要编译的java源文件指定当前位置的确切路径,但要运行类文件,我只需要类限定名。

java命令是否以递归方式查看当前目录中的所有文件夹以查找该类并执行它?

如果是这样的话,为什么javac的工作方式不同,但希望有绝对路径?

从我的项目文件夹位置

javac -cp ".:/Users/page/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:target/classes" src/main/java/app/Assignment04.java


java -cp ".:/Users/page/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:target/classes" app.Assignment04

编辑: 当我明确提到这样的路径; java -cp ".:/Users/page/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:src/main/java/com/scg/util/*:src/main/java/com/scg/domain/*:src/main/java/app/*" app.Assignment04

我明白了 Error: Could not find or load main class app.Assignment04

虽然我在src/main/java/app/

中提供了classpath

1 个答案:

答案 0 :(得分:0)

-cp ".:/Users/page/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar:target/classes"

是重要的一点。编译classpath参数时,不考虑源文件本身(仅用于解析依赖关系)。

当使用java运行时,会在类路径上查找指定的类,将目标目录显式包括为target/classes。因此,该位置也用于查找相关课程。