这是我的问题的后续行动:
error in java basic test program
这仍然令我感到困惑。 所以具体问题是:
我已经完成了一个包和目录。 比如com.learn.java.mypackage
$ pwd
.../com/learn/java/mypackage
在这里我想在同一个包中创建一个测试程序并执行它。
$cat TestPackage.java
package com.learn.java.mypackage;
public class TestPackage
{
public static void main(String args[])
{
System.out.println("Hello World\n");
}
}
$ javac TestPackage.java
// runs file
$ Java TestPackage
Exception in thread "main" java.lang.NoClassDefFoundError: TestPackage (wrong name: com/learn/java/TestPackage)
如果java运行时希望确保属于某个包的文件位于同一个命名目录中,则此处为true。那它为什么还要残疾?
答案 0 :(得分:1)
编译在与java文件相同的目录中可以正常工作 但是,要运行java程序,您需要转到程序包启动的目录,并向命令提供完整的程序包信息
转到包含com文件夹的目录并使用
java com.learn.java.mypackage.TestPackage
答案 1 :(得分:1)
您应该从java com.learn.java.mypackage.TestPackage
的父文件夹中执行com
。
因此,如果com
的完整路径为/my/project/folder/com/...
,您应该从java com.learn.java.mypackage.TestPackage
/my/project/folder
从聊天中粘贴:
您可以在任意位置使用java -cp /my/project/folder a.b.c.ClassName
,告诉java
查找包ClassName
中找到的类a.b.c
,并且应该在路径中搜索包: /my/project/folder
答案 2 :(得分:0)
将.
添加到类路径中,并使用完全限定名称(带包)
java -cp。 com.learn.java.mypackage.TestPackage
答案 3 :(得分:0)
this Java tutorial提供了解释:
classes目录的完整路径\ classes称为类路径,并使用CLASSPATH系统变量进行设置。编译器和JVM都通过将包名称添加到类路径来构造.class文件的路径。例如,如果
<path_two>\classes
是您的类路径,包名称是
com.example.graphics, 然后编译器和JVM在
中查找.class文件<path_two>\classes\com\example\graphics.
类路径可能包含多个路径,用分号(Windows)或冒号(Unix)分隔。默认情况下,编译器和JVM搜索当前目录和包含Java平台类的JAR文件,以便这些目录自动出现在类路径中。
答案 4 :(得分:0)
您必须以这种方式使用标记“-d”编译文件:
javac -d。 TestPackage.java java TestPackage.java
尝试!