将包安排为“反向URL表示法”:无法运行主类

时间:2012-01-28 10:17:56

标签: java

我安排我的班级来反转URL表示法(newb对一个挑剔的包的反应)。我的sudoku中有home目录。它在binaries和我的来源中保存了“Drools Planner”的二进制包。目录的排列方式如

jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ ls src/main/java/in/co/technovia/sudoku/
App.class  App.java~  helloworld.class  helloworld.java~
App.java   domain     helloworld.java   solution

我的课程路径指向.以及上面提到的“Drools Planner”binaries

jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ export | grep CLASSPATH
declare -x CLASSPATH=".:/home/jesvin/dev/drools/sudoku/binaries/*"

App.java在第一行有这个:package in.co.technovia.sudoku;

我尝试使用完全限定的包名称在源代码的根目录中运行App类:

jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ java in.co.technovia.sudoku.helloworld
Exception in thread "main" java.lang.NoClassDefFoundError: in/co/technovia/sudoku/helloworld
Caused by: java.lang.ClassNotFoundException: in.co.technovia.sudoku.helloworld
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: in.co.technovia.sudoku.helloworld. Program will exit.

我的问题对Java来说是一个基本问题:如何运行java命令或设置CLASS_PATH以便程序包运行良好?

1 个答案:

答案 0 :(得分:3)

类文件与java文件位于同一文件夹中(在您的情况下),因此您需要使用

CLASSPATH=".:/home/jesvin/dev/drools/sudoku/src/main/java"

然后,要执行该类,请使用您在问题中发布的命令,它应该可以正常工作。

当您的代码正确编译到binaries目录时,您可以将此目录添加到类路径中(最后不要使用'*',因为这会添加所有子目录!)。然后,检查内部是否有名为in的目录,因为目录结构必须反映包结构。

此外,我想请您遵循Java命名约定并始终使用大写字母启动类名! Java Naming Conventions