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, Procyon 및 Fernflower의 세 가지 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 도구를 선택하는 것이 가장 간단한 방법일 수 있습니다.