JAR 파일을 실행하는 방법


207

다음과 같은 JAR 파일을 작성했습니다.

jar cf Predit.jar *.*

이 JAR 파일을 두 번 클릭하여 실행했습니다 (작동하지 않았습니다). 그래서 다음과 같이 DOS 프롬프트에서 실행했습니다.

java -jar Predit.jar

"주 클래스를로드하지 못했습니다"예외가 발생했습니다. 그래서이 JAR 파일을 추출했습니다.

jar -xf Predit.jar

클래스 파일을 실행했습니다.

java Predit

잘 작동했습니다. JAR 파일이 작동하지 않는 이유를 모르겠습니다. JAR 파일을 실행하는 단계를 알려주십시오

답변:


207

jar 파일 매니페스트에 Main-Class를 지정해야합니다.

오라클의 튜토리얼 에는 완전한 데모가 포함되어 있지만 여기에는 처음부터 다른 데모가 있습니다. 두 개의 파일이 필요합니다 :

Test.java :

public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}

manifest.mf :

Manifest-version: 1.0
Main-Class: Test

텍스트 파일은 줄 바꿈 또는 캐리지 리턴으로 끝나야합니다. 마지막 줄은 줄 바꿈이나 캐리지 리턴으로 끝나지 않으면 제대로 구문 분석되지 않습니다.

그런 다음 다음을 실행하십시오.

javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar

산출:

Hello world

1
테스트 클래스가 jar 파일을 통해 다른 클래스를 참조하는 경우 어떤 수정을 수행해야합니까?
Anand

@Anand 다음 매니페스트에 Class-Path 행을 포함시키고 다른 jar을 참조해야합니다. docs.oracle.com/javase/tutorial/deployment/jar/downman.html
rob

이 질문에 나를 도와주세요 : stackoverflow.com/questions/24740803/…
Sajad

주어진 매니페스트 파일의 내용이 이미 docs.oracle.com/javase/tutorial/deployment/jar/appman.html
Georgii Oleinikov

2
이것은 엔드-투-엔드 샘플입니다. 완벽한 단순하고 바삭 바삭합니다. 나는 몇 시간 동안 이와 같은 것을 찾고있었습니다. "Hello world"java jar 작성 방법을 검색 할 때 왜 간단한 인터넷없이 전체 인터넷에 모든 정크가 가득 차 있는지 확실하지 않습니다. 많은 감사합니다.
Atul

58
java -classpath Predit.jar your.package.name.MainClass

이 항아리가 다른 항아리를 사용하는 경우 클래스 경로가 "/ path / to / jars / *"와 같아서는 안됩니까?
Maxim Chetrusca

5
@ Max Chetrusca 예. 그러나 쉘이 다음과 같이 확장하기 때문에 구분 기호가 :사용 *되지 않습니다. "/path/to/jars/a.jar" "/path/to/jars/b.jar"하지만 실제로 원하는 것은 : "/path/to/jars/a.jar:/path/to/jars/b.jar".
Lynch

29

jar 검사를 실행하기 전에 MANIFEST.MF 파일 Main-Class: classname에서 사용 가능하거나 사용 불가능 합니다. MANIFEST.MF가 jar에 있습니다.

java -jar filename.jar

16

jar에 manifest를 추가해야합니다. 이는 java 런타임에 기본 클래스가 무엇인지 알려줍니다. 다음 내용으로 'Manifest.mf'파일을 만듭니다.

Manifest-Version: 1.0
Main-Class: your.programs.MainClass

'your.programs.MainClass'를 실제 메인 클래스로 변경하십시오. 이제 파일을 'META-INF'라는 하위 폴더에있는 Jar 파일에 넣습니다. 이를 위해 ZIP 유틸리티를 사용할 수 있습니다.


1
호기심만으로도 'Meta-inf'하위 폴더 이름은 대소 문자를 구분합니까? 나는 전통적으로는 'META-INF'철자 보았다
아담 Paynter

네가 옳아. 스펙은 "META-INF"라고하고 대소 문자를 구분하지 않는다 ( java.sun.com/j2se/1.4.2/docs/guide/jar/… )
Florian Fankhauser

12

.class, .jar 파일을 작성하는 매우 간단한 방법입니다.

jar 파일을 실행합니다. 매니페스트 파일에 대해 너무 걱정할 필요가 없습니다. 간단하고 우아하게 만드십시오.

자바 샘플 Hello World Program

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

클래스 파일 컴파일

javac HelloWorld.java

jar 파일 작성

jar cvfe HelloWorld.jar HelloWorld HelloWorld.class

또는

jar cvfe HelloWorld.jar HelloWorld *.class

jar 파일 실행

 java -jar HelloWorld.jar

또는

java -cp HelloWorld.jar HelloWorld

예, jar의 옵션을 e사용하면 Main-Class( entrypoint ) 를 지정하고 해당 매니페스트 파일을 생성 할 수도 있습니다. jar 공식 문서를 참조하십시오 .
Petr Bodnár

11

jar 파일을 실행하기 위해 매니페스트를 만들지 않으려면 jar 파일을 실행할 때 명령 줄에서 직접 주 클래스를 참조 할 수 있습니다.

java -jar Predit.jar -classpath your.package.name.Test

jar 파일에서 실행할 기본 클래스를 설정합니다.


2
-classpath바로 뒤에 와서 java제거하십시오 -jar(즉,이 답변이 잘못되었습니다)
Pete

4

자바

class Hello{
   public static void main(String [] args){
    System.out.println("Hello Shahid");
   }
}

manifest.mf

Manifest-version: 1.0
Main-Class: Hello

명령 행에서 :

$ jar cfm HelloMss.jar  manifest.mf Hello.class 
$ java -jar HelloMss.jar

산출:

Hello Shahid

3

이러한 세부 사항을 처리하지 않으려는 경우 Eclipse 또는 NetBeans의 내보내기 jar 보조자를 사용할 수도 있습니다.


3

Eclipse 실행 가능 JAR 파일

자바 프로젝트 만들기 – RunnableJAR

  • jar 파일 이 사용 된 경우 프로젝트 빌드 경로에 추가하십시오.
  • Runnable Jar 파일을 작성하는 동안 main ()이있는 클래스를 선택하십시오. 여기에 이미지 설명을 입력하십시오

메인 클래스

public class RunnableMainClass {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Name : "+args[0]);
        System.out.println(" ID  : "+args[1]);
    }
}

인수를 제공 하여 java 프로그램 ( cmd )을 사용하여 Jar 파일을 실행 하고 Eclipse 콘솔에 출력 및 표시를 가져 오십시오.

public class RunJar { 
    static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        String jarfile = "D:\\JarLocation\\myRunnable.jar";
        String name = "Yash";
        String id = "777";

        try { // jarname arguments has to be saperated by spaces
            Process process = Runtime.getRuntime().exec("cmd.exe start /C java -jar "+jarfile+" "+name+" "+id);
                    //.exec("cmd.exe /C start dir java -jar "+jarfile+" "+name+" "+id+" dir");
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream ()));
            String line = null;
            while ((line = br.readLine()) != null){
                sb.append(line).append("\n");
            }
            System.out.println("Console OUTPUT : \n"+sb.toString());
            process.destroy();
        }catch (Exception e){
            System.err.println(e.getMessage());
        }
   }
}

이클립스에서 찾을 수 짧은 인하 :

도움말 ► 도움말 목차 ► Java 개발 사용자 안내서 ► 참조 ► 메뉴 및 조치


3

이 폴더 구조가 있습니다.

D : \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main.class D : \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ press \ OlivePress.class D : \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Kalamata .class D : \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian.class D : \ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive.class

Main.class 패키지에 com.lynda.olivepress

다른 두 가지 패키지가 있습니다.

com.lynda.olivepress.press

com.lynda.olivepress.olive

1) "Manifest.txt"두 줄로 이름이 지정된 파일을 만듭니다 ( 첫 번째는 메인 클래스이고 두 번째는 빈 줄입니다).

Main-Class: com.lynda.olivepress.Main

D : \ JavaProjects \ OlivePressApp \ Manifest.txt

2) 매니페스트 및 기본 클래스 진입 점이있는 JAR 작성

D : \ JavaProjects \ OlivePressApp>jar cfm OlivePressApp.jar Manifest.txt com/lynda/olivepress/Main.class com/lynda/olivepress/*

3) JAR 실행

java -jar OlivePressApp.jar

참고 : com/lynda/olivepress/*지점 1 이전에 위에서 언급 한 다른 두 패키지를 포함하는 수단)


-2

jar를 실행하려면 먼저 u를 만들어야합니다

실행 가능한 항아리

그때

자바 -jar xyz.jar

명령이 작동합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.