2011-02-03 6 views
1

저는 Eclipse를 사용하고 있으며 매우 간단한 프로젝트가 있습니다. 코드를 저장합니다. 그냥 잘 실행되고 잘 실행됩니다. 실제로 두 개의 .java 파일이 있습니다. 프로젝트 트리는 다음과 같습니다..JAR 파일 만들기가 실패했습니다.

**mewLog** 
- src/ (dir) 
    mewlog/ (package) 
    - MLGlobal.java 
    - MLMain.java (surprise, this one contains main and some initialization methods)  
    mlGUI/ (package) 
    - this one is empty (empty package!) 

그래서 파일 -> 내보내기로 이동합니다. 평소와 같이 단계를 따르고 경고 또는 문제없이 .JAR 파일을 정상적으로 만듭니다. 좋은!

지금까지 너무 좋은 말할 것이다, 그래서 난 내 터미널까지 돌진, 나는 내 병을 내 보낸 폴더로 이동하고 다음과 같이 실행합니다

java -jar mewLog_macosx-x86.jar 

BAM을! 여기 그것이 잘못되어 터미널은 다음과 같은 결과를 얻습니다.

Exception in thread "main" java.lang.NoClassDefFoundError: MLMain 
Caused by: java.lang.ClassNotFoundException: MLMain 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

Ok. 당신이 말하기 전에 "오, 당신은 클래스 경로를 추가해야합니다. 나는 노력했다, 그것은 작동하지 않는다. 단지 내가 BLAH를 나에게 준다. 나는 무엇을해도.

Mac OS X Snow Leopard를 사용하고 있습니다. jar -tf mewLog_MacOSX-x86.jar

jar -tf mewLog_MacOSX-x86.jar 
META-INF/MANIFEST.MF 
.project 
.classpath 
mewlog/MLGlobal.class 
mewlog/MLMain.class 

답변

2

에서

출력

java -cp mewLog_macosx-x86.jar mewlog.MLMain

작동합니까?

그래서 다음 항아리에 매니페스트 파일이 잘못된 기본 클래스 모두의

+0

에서 이클립스의 Fatjar 플러그인을 설치하십시오. –

+0

"작동하지 않는"모양은 무엇입니까? 이것은 질문하지 않는 좋은 예입니다. 읽기 : http://www.catb.org/~esr/faqs/smart-questions.html – duffymo

+0

@ 제시 : 그것이 틀렸기 때문입니다. 커맨드 라인에서 메인 클래스를 지정할 때 -jar가 아닌 -cp가되어야합니다. –

1

먼저 (계정에 패키지를 복용하지 않음)를 가리키는 경우, JAR 파일에 가지 마세요 java 파일 -을 .class 파일 않습니다. JVM은 .java 파일을 실행할 수 없습니다. 먼저 컴파일해야합니다.

둘째, 실행 가능 JAR로 만들려면 main 메소드가있는 클래스를 지정하는 매니페스트를 추가해야합니다.

이클립스를 꺼내서 손으로 처음으로하는 것이 가장 좋습니다./bin 디렉토리에서 jar.exe 도구를 사용하십시오.

Here's 당신을 도울 수있는 (또는 아닐 수도있는) 링크.

+0

이미 내 .JAR의 압축을 푼 파일은 .class 파일입니다. 나는 Java에 익숙하지 않지만 전에는이 문제에 결코 빠져 본 적이 없습니다. 내가하는 일에 상관없이 작동하지 않습니다. 그래도 고마워. –

+0

.class 파일이 올바른 패키지 구조에 해당하는 경로를 표시합니까? 매니페스트가 맞았습니까? 내가 보낸 링크를 통해 가십시오 - 당신이해야 할 일을 정확하게 알려줄 것입니다. 그래도 작동하지 않는다면 잘못했다는 뜻입니다. – duffymo

+0

나는 그것을 시도 할 것이다, 희망을 갖고 그것이 나를 도와 줄 것이다. 감사. –

0

"File-> Export-> Java-> JAR file"또는 "File-> Export-> Java-> Runnable JAR file"을 선택 했습니까? Manifest.MF 파일이 VM에 주 클래스가 무엇인지 알려주지 않는 한 jar는 기본적으로 실행 가능하지 않습니다.

0

컴파일 된 클래스를 jar에 넣고 메인 클래스 인 매니페스트 파일에 지정해야합니다.

터미널이 시도 :

$cat Hola.java 
package hola; 

class Hola { 
     public static void main(String ... args) { 
       System.out.println("Hola mundo!"); 
     } 
} 

$cat m.mf 
Main-Class: hola.Hola 

$javac -d . Hola.java 


$jar -cmf m.mf hola.jar hola 

$java -jar hola.jar 
Hola mundo! 

그런 다음

여기서 포인트의 구조 경우 식별하는 것입니다 항아리의 내용을 비교하고 (명백한 다른 클래스 이름 옆에) 다른 무엇이 있는지 당신의 항아리 파일이 맞는지 아닌지 (jar -tf mewLog_macosx-x86.jar의 출력을 제공하면 도움이됩니다)

나는 이것이 도움이되기를 바랍니다.

+0

이제 진도가 나옵니다. mewLog_MacOSX-x86.jar에서 Main-Class Manifest 속성을로드하지 못했습니다. –

+0

업데이트에 따라 Doon의 (수정 된) 응답이 작동해야합니다. 'open myjar' 또는 두 번 클릭하여 호출 할 수있는 자체 실행 jar 파일을 원할 경우'Main-Class' 파일을 지정하는 곳에 manifest 파일을 만들어야합니다 (위의 예제 참조). – OscarRyz

1

문제는 주 클래스가 정규화 된 이름 (예 : 패키지 포함)으로 나열되어야합니다. Java는 클래스 MLMain을 찾고 있는데 이는 클래스 경로 루트에서 직접 보임을 의미합니다. 하지만 수업은 mewlog 패키지 안에 mewlog.MLMain입니다.

+0

Doon "comment/answer/question"참조 http://stackoverflow.com/questions/4891924/creating-a-jar-file-nothing-works-desperate-help/4891959#4891959 나는 fqn 문제가 아닌 것으로 생각한다. – OscarRyz

+0

@ OscarRyz : 거기에 의견을보세요. –

+0

여기에 코멘트 잊지 :) – OscarRyz

0

나는 자바 -jar와 명령 줄에서 JAR 파일을 작성하고 빌드 프로세스에 익숙

  1. 을 제안합니다.

  2. http://download.oracle.com/javase/tutorial/deployment/jar/basicsindex.html 불행히도 작동하지 않습니다 http://fjep.sourceforge.net/

+0

좋은 영주, Eclipse는 실제로 실행 가능한 JAR을 생성하기 위해 플러그인을 필요로합니까? – duffymo

+0

@duffymo : 아니요, 이클립스는 코드가 다른 * jar에 의존하지 않는 한 잘 작동합니다. 만약 그렇다면, 이클립스 자체에서 당신의 실행 가능한 병에 모든 클래스를 repackages, 이는 지저분하고 법적으로 의문의 대상이 될 수 있습니다. Fatjar는 중첩 된 jar 파일을 생성하는데 특별한 classloader가 필요하고 매우 느립니다. 정말 좋은 해결책은 없습니다. –

+0

플러그인을 설치하는 데 약간 어리석은 소리가 들립니다. : P –