我刚刚注意到,为了编译,我需要为我需要编译的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
答案 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
。因此,该位置也用于查找相关课程。