java - 一个接口(interface)给我 java.lang.NoClassDefFoundError

标签 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.

我知道接口(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();
    }
}

是不是我把SudokuSolution转换错了?


我的类路径设置为:

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/

相关文章:

java - 延迟初始化异常 : could not initialize proxy - no Session

linux - 通过插件 OS X 和 Linux 将 ffmpeg 集成到 unity

java - Spring Boot + 集成测试

Java 多线程,池的最佳大小取决于 CPU 内核(虚拟多线程和物理)

java - JButton 添加属性

c++ - 单个进程如何处理链接到同一库的多个共享库?

linux - 创建,格式化和安装分区表

linux - 当第一个文件作为键具有多个值时,使用awk匹配2个文件

linux - 如何在重启 Linux 机器之前添加条件

java - 使用 XLConnect : run out of Java memory 将 Excel 文件读取到 R