2008-11-15 6 views
2

다음과 같이 명령 줄 구문을 사용하여 Java 기반 도구를 실행하려고합니다. java -cp archive.jar archiveFolder.theMainClassName.I 클래스를 검색하고 있는데 , 메인 클래스 인 "theMainClassName"은 archive.jar에 있고, 입력시 주어진 archiveFolder에는 클래스가 보이지 않는 오류가 계속 발생합니다. 아무도이 문제에 관한 아이디어가 있습니까? 사전에 감사합니다Jar 아카이브에서 클래스를 읽을 때 Java 명령 줄 문제가 발생했습니다.

+0

'jar tf '명령을 실행하고 결과를 게시하십시오. 사용중인 정확한 명령 줄과 java 명령이 출력 한 정확한 오류 메시지를 잘라내어 붙여 넣으십시오. – erickson

답변

5

작업을 수행하는 작업에 대한 구체적인 예이다 tuation.

이 코드를 가져 와서 MainClass.java 파일에 저장하십시오. (. 나는 보통은 물론, 패키지에 맞게 소스를 준비 거라고 디렉토리 나중에 src라고 가정했습니다.)

package archiveFolder; 

public class MainClass 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("I'm MainClass"); 
    } 
} 

그런 다음 각 명령을 실행

# Compile the source 
javac -d . src/MainClass.java 

# Build the jar file 
jar cf archive.jar archiveFolder 

# Remove the unpackaged binary, to prove it's not being used 
rm -rf archiveFolder # Or rmdir /s /q archiveFolder on Windows 

# Execute the class 
java -cp archive.jar achiveFolder.MainClass 

결과 :

I'm MainClass 

jar 파일을 어떻게 구성합니까? 적절한 패키지에 코드가 있습니까? 종속 클래스 (고정 부재)가 발견되지 않는 경우

1

아마 java -jar archive.jar으로? 물론

, 그것은

당신이있어 정확한 메시지를 제공해야합니다, 그것은 더 많은 빛을 흘릴 수 ... 올바른 클래스에 매니페스트 점을 가정한다.

EDIT : jar 매니페스트 파일에서 응용 프로그램 진입 점 (기본 클래스)을 설정하는 방법은 Working with Manifest Files: The Basics을 참조하십시오.

package archiveFolder 

당신은 선언 된 패키지와 같은 디렉토리 구조로 클래스 파일이 필요합니다

+0

이것은 실제로 질문에 대답하지 않습니다 ... 그는 항아리를 실행하려고 시도하지 않고 항아리의 특정 클래스를 실행하려고합니다. 거의 확실하게 포장 문제입니다. –

+0

이 질문에 대한 특정 질문에 답변하지 않는다는 것에 동의하지만 다른 사람들은 자신의 매니 페스트에 문제가있을 수 있습니다. 그들은이 질문을 가로 질러 달릴 것입니다. 그래서 나는이 대답을 가질 가치가 있다고 생각합니다. –

+0

@Bill 사실입니다. –

3

합니까 theMainClassName 클래스 상단에 다음과 같은 패키지 라인을 가지고있다. 당신이 뭔가를했다 그래서 경우 :

org/jc/tests/TestClass.class 

의 소스 파일은 다음과 같이해야합니다 :

package org.jc.tests; 

public class TestClass { 
    public static void main(String[] args) { 
    System.out.printf("This is a test class!\n"); 
    } 
} 

는 그런 다음 jar 파일을 생성하고 명령 줄에서 실행하려면 다음 사용할 수 있습니다 (현재 디렉토리를 가정하는 것은) 단지 조직 위, 최상위 수준에있다 : 당신이 당신의 자신의시를 비교할 수 있도록

다음
$ jar -cf testJar.jar org/jc/tests/*.class 
$ java -cp testJar.jar org.jc.tests.TestClass 
1

보통이 발생 -의 log4j를 사용해,이 같은

public class MyClass { 
    private static Logger log = Logger.getLogger("com.example"); 
} 

이유는 고정 부재의 초기화의 일부로서 이해 될 수 있다는 클래스 로딩 - 클래스를 사용 가능하게하지 못하게하는 오류 (로드 가능)로 인해 설명 된 오류가 발생합니다.

public class MyClass { 
    static { 
    // <b>any</b> error caused here will cause the class to 
    // not be loaded. Demonstrating with stupid typecast. 
    Object o = new String(); 
    Integer i = (Integer) o; 
    } 
} 
0

내가 다른 사람이 여기에 몇 가지 일반적인 물건을 덮여 있다고 생각 :

정적 생성자는 또 다른 가능한 이유입니다. 항아리를 항아리에 넣고 수업이 열거되어 있는지 확인하십시오. 또한 클래스가 public이고 메서드가 "public static void main (String [] arg)"인지 다시 확인합니다.

관련 문제