2012-01-27 3 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 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>{ 
... 

그리고 여기이 날의 결과 인 Sudoku 클래스

의 인스턴스를 사용하는 가정되는 App 클래스 Sudoku과 (과) Solution 사이에 잘못 전송 하시겠습니까? 당신은 클래스 org.drools.planner.core.solution.Solution의 외부 JAR 파일을 추가 할 필요가

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

답변

2

@GPRathour 위에 쓴, 당신은 클래스 패스에이 샘 플래너에서 단지를 추가해야합니다으로 얻을 수 있습니다.

나는 /home/jesvin/dev/drools/sudoku/binaries가 디렉토리라고 생각합니다. 거기에 항아리가 필요합니다. 더 좋은 방법은 항상 확인해야 예외 스택에서 -classpath

java -classpath path/jar1;path/jar App

를 통해 명령 줄에 항아리를 추가하는 것입니다

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

사용자가 응용 프로그램을 컴파일하므로 사용자는 이미 jars가 다운로드되어 있습니다. – 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> 
관련 문제