有一个类a.b.c.Hello
,我只会传递Hello.class
文件。我想使用类似的东西来运行:
java Hello
//or
java a.b.c.Hello
这导致我NoClassDefFoundError
。通常情况下,我会在a/b/c
类帐户中添加-classpath
dirs,并将其添加到a/b/c
选项中,但是:
.class
中以匹配包名称?我发现所有解决方案都说明目录结构必须与程序包命名相匹配,但我希望直接从文件夹中运行v 25.+
文件,而无需重新创建文件夹结构
答案 0 :(得分:1)
有没有办法在这样的包中运行类而不必将它放在/ b / c中以匹配包名?
是:使用罐子。将.class
文件放在jar中(使用正确的路径),然后:
java -cp TheJarFile.jar a.b.c.Hello
这当然非常像将它放在a/b/c
目录中;它只是目录在jar中,而不是文件系统。
答案 1 :(得分:0)
这些包不只是structure
您的课程(在文件夹中),还会创建namespace
。虽然简单的类名是Hello,但真正的类名是a.b.c.Hello。
那是因为类名可能经常重复(在不同的库中,f.e),但另一方面必须是可寻址的。例如:'用户','记录器','列表','日期'。
不推荐,但你也可以将你的类放在默认包中。只需删除'包...'线。