2012-01-27 10 views
0

私のプログラムはうまくコンパイルされました。しかし、問題は私がそれを実行しようとすると始まります。私に与えるインターフェイスjava.lang.NoClassDefFoundError

[email protected]:~/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クラス

のインスタンスを使用することになっているAppクラスは、それが私の結果です

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>{ 
... 

そしてここに:ここで

implements Solutionという問題のクラスSudokuですSudokuSolutionの間に間違ったキャストがありますか?


私のクラスパスは、次のように設定されている:あなたは、クラスorg.drools.planner.core.solution.Solutionの外部Jarファイルを追加する必要が

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

答えて

2

@GPRathourは上記に書いた、あなたがクラスパスにDroolsのプランナーからjarを追加する必要があるとして取得することができます。

と思われます。/home/jesvin/dev/drools/sudoku/binariesはディレクトリです。あなたはそこに瓶を入れる必要があります。より良いアプローチは、あなたが常にチェックすべき例外スタックでは-classpath

java -classpath path/jar1;path/jar App

を介してコマンドラインでjarファイルを追加することになります

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

いくつかの事のように...」メッセージによって引き起こされる。この場合、実際の例外はCaused by: java.lang.ClassNotFoundException: org.drools.planner.core.solution.Solutionでした。

(他のものは、適切なパッケージ内のクラスを持つことは、後でコードを読んで多くのことができます。使用パッケージをnote--します。)

+0

右上にあります。私は、 'declare -x CLASSPATH =":/ home/jesvin/dev/drools/sudoku/binaries/* "'のようにすべてのjarをインポートする 'dir/*'機能を使用しました。コンパイラのクラスパスはカスタムコマンドにハードコードされていて、環境変数を間違って残してしまいました。 – aitchnyu

+0

あなたもケラテイトですか? – aitchnyu

2

は、あなたはそれがfrom here

+0

ユーザがコンパイルしているので、jarファイルはすでにダウンロードされています。 – Jayan

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> 
関連する問題