본문 바로가기
자바

[Java] JDK가 제공하는 기본 개발 도구 (javac, java, javadoc, jps, jmap)

by 책 읽는 개발자_테드 2021. 12. 6.
반응형

JDK를 설치하고, bin 디렉토리를 확인해보자. 다음과 같이 JDK가 제공하는 기본 개발 도구들을 볼 수 있다.

이 도구 들의 기능을 직접 사용해보고, 어떠한 기능을 하는지 알아보자. 

 

* 다음 예시들은 JDK 11 버전을 기준으로 작성했습니다. 

 

javac


· 자바 코드로 작성된 파일(.java)을 JVM이 실행 가능한 파일(.class)로 컴파일하는 명령어

   - .class 파일은 자바 바이트코드로 구성된 파일이다.

 

· 사용법: javac [파일명.java]

 

사용 예시

 

명령어를 사용하기전, 명령어를 적용할 HelloWorld.java 파일을 생성하고, 아래와 같이 작성한다.

 

HelloWord.java

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

 

그리고 터미널을 통해 HelloWorld.java 파일이 있는 경로에서 다음 명령어를 실행한다.

 

javac HelloWorld.java

 

그러면, 다음과 같이 HelloWorld.class 파일이 생성된다.

 

java


· 컴파일된 자바 바이트 코드 파일(.class)를 실행하는 명령어

 

· 사용법: javac [클래스명]

 

사용 예시

위에서 javac 명령어를 통해 컴파일한 클래스이름과 함께 java 명려어를 입력한다.

 

java HelloWorld

 

다음과 같이 HelloWorld.java 파일에 작성한 코드가 실행되는 것을 볼 수 있다.

 

 

 

jar


· 자바에서 사용되는 묶음 파일인 Jar 파일을 다루기 위한 명령어다.

  - JAR: Java Archive, 파일 확장자는 .jar이다.

  - Jar 파일은 클래스 파일들을 편리하게 배포하기 위해 실행에 필요한 여러 파일들(클래스, 텍스트, 그림, 메타데이터 등)을

     묶어 하나의 파일로 만든 것이다. 

 

· 사용법: 

   - 파일 묶기: jar -cvmf 메니페스트파일.MF 생성할파일이름.jar 묶을파일이름.class

   - 파일 풀기: jar -xvf 묶음파일이름.jar

   - 자세한 옵션: https://ohgyun.com/36

 

사용 예시

명령어를 실행하지 전 'HelloWord2.java'라는 파일을 생성하고, 컴파일(javac)하여 HelloWorld2.class 파일을 만든다.

 

HelloWorld.java

public class HelloWorld2 {
}

 

Manifest.txt라는 메니페스트파일을 아래와 같이 만든다. 여기서 추가하는 데이터는 jar 파일의 메인 클래스를 지정한다.

   - 메니페스트 파일은 메타데이터 정보를 포함한다.

   - 메타데이터 정보에는 확장 정보 및 패키지 관련 데이터가 기술되어 있으며, 키-값 형태의 문자열로 구성된다.

 

Manifest.MF

Main-Class: HelloWorld

 

HelloWorld.class 파일과 HelloWold2.class 파일의 메타데이터를 Manifest.MF로 설정하여, abc.jar 파일로 묶는 다음 명령어를 실행한다.

 

jar -cvmf Manifest.MF abc.jar HelloWorld.class HelloWorld2.class

 

위 이미지를 보면 abc.jar 파일이 생성된 걸 확인할 수 있다. 이렇게 생성한 jar 파일은 위에서 학습한 'java' 명령어로 실행할 수 있다.

 

java -jar abc.jar

 

 

이번에는 생성한 jar 파일을 다시 여러 개의 파일로 풀어보자.

먼저 'jarDir'이라는 디렉터리를 만들고, 해당 디렉터리에 abc.jar 파일을 옮긴다. 그리고 해당 위치에서 다음 명령어를 입력한다.

 

jar -xvf abc.jar

 

다음과 같이 기존에 묶은 파일들이 다시 풀어지는 걸 확인할 수 있다.

 

 

javadoc


· 자바 코드를 문서화하는 명령어

· 문서화할 클래스, 필드, 메서드, 애노테이션, 인터페이스 등에 주석 및 어노테이션으로 문서를 작성하면, HTML 등 다양한 포맷으로 export 할 수 있다.

 

· 사용법: javadoc 문서화할파일.jar

 

사용 예시

기존에 생성한 HelloWorld.java 파일을 대상으로 javadoc 명령어를 적용한다.

 

javadoc HelloWorld.java

 

문서화를 위한 다양한 파일이 생성되는 걸 볼 수 있다.

 

여기서 javadoc 명령어의 대상파일이름.html의 파일을 브라우저로 클릭하면, 해당 클래스 정보를 아래와 같이 볼 수 있다.

 

jps


· 현재 실행 중인 자바 프로세스들의 이름과 프로세스 ID를 보여주는 명령어

· 사용법: jps

 

사용 예시

 

jmap


· 현재 실행 중인 자바 프로세스들의 메모리관련 통계를 보여주는 명령어다.

· jps, jmap은 에러 원인 분석이나 JVM 사애를 모니터링 하기 위해 사용한다.

· 사용법:

  ● jamp -clstats <pid> : 실행중인 프로세스와 연결하고, 클래스 로더의 통계를 출력한다.

  ● jmap -finalizerinfo <pid> : 실행중인 프로세스와 연결하고, 소멸을 기다리는 객체의 정보를 출력한다.

  ● jmap -histo[:[<histo-options>]] <pid> : 실행중인 프로세스와 연결하고, 자바 객체 힙의 히스토그램(도수분포표 그래프)을 출력한다.
  ● jmap -dump:<dump-options> <pid> : 실행중인 프로세스와 연결하고, 자바 힙 덤프를 뜬다.

 

사용 예시

위의 jps로 확인한 프로세스id(pid)를 타켓으로 명령어를 적용해보자. 다음 명령어로 클래스 로더의 통계를 출력한다.

 

 jmap -clstats 20932

 

자바 객체 힙의 히스토그램을 출력한다. (길어서 결과 생략)

jmap -histo 95689

 

 

출처

 

https://blog.live2skull.kr/javadoc/java/java-javadoc/

https://blog.opid.kr/375

 

반응형

댓글