我的程序编译正常。但是当我尝试运行它时,问题就开始了。
jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ java App
Exception in thread "main" java.lang.NoClassDefFoundError: org/drools/planner/core/solution/Solution
Caused by: java.lang.ClassNotFoundException: org.drools.planner.core.solution.Solution
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: App. Program will exit.
我知道接口(interface) Solution
已在编译时正确解析。
这是实现解决方案
的违规类Sudoku
:
package domain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.drools.planner.api.domain.solution.PlanningEntityCollectionProperty;
import org.drools.planner.core.solution.Solution;
import org.drools.planner.core.score.SimpleScore;
public class Sudoku implements Solution<SimpleScore>{
...
这里是 App
类,它应该使用 Sudoku
类的实例
import java.util.ArrayList;
...
import org.drools.planner.config.XmlSolverConfigurer;
...
//solution too
import org.drools.planner.core.solution.Solution;
import solution.SudokuGenerator;
import domain.Sudoku;
public class App{
public static void main(String[] args){
SudokuGenerator sg = new SudokuGenerator();
Solution sudoku = sg.createSudoku();
Solver solver = createSolver();
solver.setPlanningProblem(sudoku);
solver.solve();
Sudoku result = (Sudoku) solver.getBestSolution();
result.displaySolution();
}
private static Solver createSolver(){
XmlSolverConfigurer configurer = new XmlSolverConfigurer();
configurer.configure("solver.xml");
return configurer.buildSolver();
}
}
是不是我把Sudoku
和Solution
转换错了?
我的类路径设置为:
declare -x CLASSPATH=".:/home/jesvin/dev/drools/sudoku/binaries"
最佳答案
正如@GPRathour 上面所写,您需要将 drools planner 中的 jars 添加到类路径中。
我猜 /home/jesvin/dev/drools/sudoku/binaries
是一个目录。你需要把 jar 放在那里。
有些东西像...
声明 -x CLASSPATH=".:/home/jesvin/dev/drools/sudoku/binaries/drools-planner-core.jar
更好的方法是通过 -classpath 在命令行中添加 jar
java -classpath path/jar1;path/jar App
在异常堆栈中,您应该始终检查“由”消息引起的。在此你真正的异常是 Caused by: java.lang.ClassNotFoundException: org.drools.planner.core.solution.Solution
。
(其他需要注意的事情——使用包。将类放在适当的包中有助于以后阅读代码。)
关于java - 一个接口(interface)给我 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029840/