1. 개요

JAR 파일에서 클래스 이름을 가져오는 방법을 배웠습니다 . 또한 해당 사용방법(예제)에서 Java 응용 프로그램의 JAR 파일에서 클래스 이름을 가져오는 방법에 대해 설명했습니다.

이 사용방법(예제)에서는 명령줄에서 JAR 파일의 내용을 나열하는 또 다른 방법을 배웁니다.

또한 JAR 파일의 보다 자세한 내용을 보기 위한 여러 GUI 도구(예: Java 소스 코드)도 볼 수 있습니다.

2. JAR 파일의 예

이 사용방법(예제)에서는 JAR 파일의 내용을 보는 방법을 설명하기 위해 여전히 stripe-0.0.1-SNAPSHOT.jar 파일을 예로 사용합니다.

3. jar 명령 검토

JDK와 함께 제공되는 jar 명령을 사용하여 JAR 파일의 내용을 확인할 수 있다는 것을 배웠습니다 .

$ jar tf stripe-0.0.1-SNAPSHOT.jar 
META-INF/
META-INF/MANIFEST.MF
...
templates/result.html
templates/checkout.html
application.properties
com/baeldung/stripe/StripeApplication.class
com/baeldung/stripe/ChargeRequest.class
com/baeldung/stripe/StripeService.class
com/baeldung/stripe/ChargeRequest$Currency.class

원하는 정보(예: 클래스 이름 또는 속성 파일)만 가져오도록 출력을 필터링하려는 경우 출력을 grep 과 같은 필터링 도구로 파이프할 수 있습니다 .

항아리의 명령은 우리의 시스템은 JDK가 설치되어있는 경우에 사용하는 것이 아주 편리합니다.

그러나 때때로 JDK가 설치되지 않은 시스템에서 JAR 파일의 내용을 검사하고 싶을 때가 있습니다. 이 경우  jar 명령을 사용할 수 없습니다.

이에 대해서는 다음에 살펴보도록 하겠습니다.

4. unzip 명령 사용

JAR 파일은 ZIP 파일 형식으로 패키지됩니다. 즉, 유틸리티가 ZIP 파일을 읽을 수 있으면 JAR 파일도 볼 수 있습니다.

압축 해제 명령은 리눅스 명령 줄에서 ZIP 파일 작업을 위해 일반적으로 사용되는 유틸리티입니다.

따라서 unzip 명령 -l 옵션을 사용하여  압축을 풀지 않고 JAR 파일의 내용을 나열할 수 있습니다.

$ unzip -l stripe-0.0.1-SNAPSHOT.jar
Archive:  stripe-0.0.1-SNAPSHOT.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2020-10-16 20:53   META-INF/
...
      137  2020-10-16 20:53   static/index.html
      677  2020-10-16 20:53   templates/result.html
     1323  2020-10-16 20:53   templates/checkout.html
       37  2020-10-16 20:53   application.properties
      715  2020-10-16 20:53   com/baeldung/stripe/StripeApplication.class
     3375  2020-10-16 20:53   com/baeldung/stripe/ChargeRequest.class
     2033  2020-10-16 20:53   com/baeldung/stripe/StripeService.class
     1146  2020-10-16 20:53   com/baeldung/stripe/ChargeRequest$Currency.class
     2510  2020-10-16 20:53   com/baeldung/stripe/ChargeController.class
     1304  2020-10-16 20:53   com/baeldung/stripe/CheckoutController.class
...
---------                     -------
    15394                     23 files

unzip 명령 덕분에 JDK 없이 JAR 파일의 내용을 볼 수 있습니다.

위의 출력은 매우 명확합니다. JAR 파일의 파일을 표 형식으로 나열합니다.

5. GUI 유틸리티를 사용하여 JAR 파일 탐색

양쪽 항아리압축 해제 명령은 편리하지만, 그들은 단지 JAR 파일의 파일 이름을 나열합니다.

예를 들어 클래스의 Java 소스 코드를 검사하는 것과 같이 JAR 파일에 있는 파일에 대한 더 많은 정보를 알고 싶을 때가 있습니다.

이 섹션에서는 JAR 파일 내부의 파일을 보는 데 도움이 되는 여러 플랫폼 독립적 GUI 도구를 소개합니다.

5.1. JD-GUI 사용

먼저 JD-GUI를 살펴보겠습니다 .

JD-GUI는 Java 디컴파일러 JD-Core에 의해 디컴파일된 Java 소스 코드를 탐색하는 멋진 오픈 소스 GUI 유틸리티 입니다.

JD-GUI는 JAR 파일을 제공합니다. 예를 들어 -jar  옵션 과 함께 java 명령을 사용하여 유틸리티를 시작할 수 있습니다 .

$ java -jar jd-gui-1.6.6.jar

JD-GUI의 기본 창이 표시되면 " 파일 -> 파일 열기... " 메뉴를 탐색하여 JAR 파일을 열거 나 창에 JAR 파일을 끌어다 놓을 수 있습니다 .

JAR 파일을 열면 JAR 파일의 모든 클래스가 디컴파일됩니다.

그런 다음 왼쪽에서 관심 있는 파일을 선택하여 소스 코드를 검사할 수 있습니다.

위의 데모에서 볼 수 있듯이 왼쪽의 개요에는 IDE에서 일반적으로 보는 것처럼 클래스와 메서드 및 필드와 같은 각 클래스의 멤버도 나열되어 있습니다 .

메소드나 필드를 찾는 것은 매우 편리합니다. 특히 코드 라인이 많은 일부 클래스를 확인해야 할 때 그렇습니다.

왼쪽에서 다른 클래스를 클릭하면 각 클래스가 오른쪽 탭에서 열립니다.

탭 기능은 여러 클래스 간에 전환해야 하는 경우에 유용합니다.

5.2. 항아리 탐색기 사용

Jar Explorer 는 JAR 파일의 내용을 보기 위한 또 다른 오픈 소스 GUI 도구입니다. 그것은 jar 파일과 시작 스크립트 " Jar Explorer.sh "를 제공합니다. 또한 끌어서 놓기 기능을 지원하므로 JAR 파일을 매우 쉽게 열 수 있습니다.

Jar Explorer가 제공하는 또 다른 좋은 기능은  JD-Core, ProcyonFernflower의 세 가지 Java 디컴파일러를 지원 한다는 입니다.

소스 코드를 검사할 때 디컴파일러 간에 전환할 수 있습니다.

Jar Explorer는 사용하기가 매우 쉽습니다. 디컴파일러 전환 기능도 좋습니다. 그러나 왼쪽의 윤곽선은 클래스 수준에서 멈춥니다.

또한 Jar Explorer는 탭 기능을 제공하지 않기 때문에 한 번에 하나의 파일만 열 수 있습니다.

또한 왼쪽에서 클래스를 선택할 때마다 해당 클래스는 현재 선택된 디컴파일러에 의해 디컴파일됩니다.

5.3. Luyten 사용

Luyten다양한 플랫폼( 예: .exe 형식 및 JAR 형식)에 대한 다운로드를 제공하는 Java 디컴파일러 Procyon을 위한 멋진 오픈 소스 GUI 유틸리티입니다 .

JAR 파일을 다운로드했으면 java -jar 명령을 사용하여 Luyten을 시작할 수 있습니다 .

$ java -jar luyten-0.5.4.jar 

JAR 파일을 Luyten에 끌어다 놓고 JAR 파일의 내용을 탐색할 수 있습니다.

Luyten을 사용하면 다른 Java 디컴파일러를 선택할 수 없습니다. 그러나 위의 데모에서 볼 수 있듯이 Luyten은 디컴파일을 위한 다양한 옵션을 제공합니다. 또한 탭에서 여러 파일을 열 수 있습니다.

그 외에도 Luyten은 멋진 테마 시스템을 지원하며 소스 코드를 검토하면서 편안한 테마를 선택할 수 있습니다.

그러나 Luyten은 JAR 파일의 구조를 파일 수준으로만 나열합니다.

6. 결론

이 기사에서는 명령줄에서 JAR 파일의 파일을 나열하는 방법을 배웠습니다. 나중에 우리는 JAR 파일의 더 자세한 내용을 보기 위해 세 가지 GUI 유틸리티를 보았습니다.

클래스를 디컴파일하고 JAR 파일의 소스 코드를 검사하려면 GUI 도구를 선택하는 것이 가장 간단한 방법일 수 있습니다.

Junit footer banner