我的程序编译得很好。但是当我尝试运行它时问题就开始了。
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.
我知道接口Solution
在编译时已正确解析。
以下是Sudoku
:
implements Solution
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"
答案 0 :(得分:2)
您需要添加类org.drools.planner.core.solution.Solution
的外部Jar文件。
你可以得到它from here
答案 1 :(得分:2)
正如上面的@GPRathour所写,你需要将drools planner中的 jars 添加到类路径中。
我猜/home/jesvin/dev/drools/sudoku/binaries
是一个目录。你需要放罐子。
有点像......
declare -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
。
(需要注意的其他事项 - 使用包。在适当的包中安装类有助于以后阅读代码。)
答案 2 :(得分:1)
我建议你使用一个可以处理第三方依赖关系的构建工具。举个例子,您可以简单地使用maven作为构建工具,在项目pom文件中,您可以声明所需的所有依赖项。以下是junit依赖的示例。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
</dependency>