从cmd执行时java类的位置
我在mypack包中有两个java类A和B从cmd执行时java类的位置,java,Java,我在mypack包中有两个java类A和B package mypack class A { public static void main (String args[]) { B b = new B(); ... } } package mypack class B {....} 从控制台编译时,我会这样做 javac -cp somepath .\mypack\*.java 这将在mypack文件夹中为我生成类文件。现在,如果我尝试使用
package mypack
class A {
public static void main (String args[]) {
B b = new B();
...
}
}
package mypack
class B {....}
从控制台编译时,我会这样做
javac -cp somepath .\mypack\*.java
这将在mypack文件夹中为我生成类文件。现在,如果我尝试使用此命令运行mypack文件夹中的.class文件
java -cp somepath mypack.A
我会得到这个错误这个错误
错误:无法找到或加载主类mypack.A
但是如果我将类文件从mypack文件夹移动到它的父文件夹并再次执行这一行
java -cp somepath mypack.A
它将正确执行
有人能给我解释一下为什么会这样吗
关于,
es-cp允许您指定类文件的位置。为了使用-cp somepath,您必须具有以下结构
somepath
|
+-mypack
|
+- A.class
+- B.class
编译后,您可以将类文件(带有反映包的目录结构)放在任何您喜欢的地方
更新:
是的,这是正确的。您不必将编译后的类放入“somepath”。您可以使用任何您喜欢的位置。事实上,你可以这样做:
> javac -d target .\mypack\*.java # this will put
# compiled classes inside "target"
然后,您可以这样运行代码:
> java -cp target mypack.A
您可以放置任意位置,而不是“target”。我认为您需要澄清classpath参数的确切含义,以及运行java命令的当前目录。我发现这很难相信。虽然你不必把mypack放在somepath文件夹中,但是由于这让我找到了正确的答案,所以我把它标记了。我只需要在-cp中添加正确的路径,如下:-cp“somepath”;“mypack父文件夹的路径”