一个接口给我java.lang.NoClassDefFoundError

时间:2012-01-27 06:42:20

标签: java linux

我的程序编译得很好。但是当我尝试运行它时问题就开始了。

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();
    }
}

这是我在SudokuSolution之间错误投射的结果吗?


我的类路径设置为:

declare -x CLASSPATH=".:/home/jesvin/dev/drools/sudoku/binaries"

3 个答案:

答案 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>