개발공작소
article thumbnail
728x90
반응형

 

 

 

 

이번에 연계시스템에서 받은 모듈(.jar)의 .class의 메서드를 수정할 일이 생겼다.

그래서 수정한 김에 정리해봄. ( 샘플파일은 postgresql.jar를 사용 )

 

 

오늘의 목표

postgresql.jar의 org.postgresql.copy 패키지 안의 CopyDual.class를 수정하여

getPrint()라는 메서드를 만들어 직접 호출

 

CopyDual.class확인

 

우선 이클립스에서 해당 경로의 CopyDual.class를 열어보면 Source not found라고 뜨며 소스를 확인 할 수 없다.

다음과 같은 순서를 통해 .class파일을 수정해보자.

 

1. .class파일을 .java파일로 디컴파일

2. .java파일 수정

3. .java파일을 .class파일로 컴파일

4. 수정한 .class파일로 .jar파일 재생성

 

 

 

1. CopyDual.class파일을 CopyDual.java파일로 디컴파일

 

1) .jar을 압축 풀어 해당 .class파일을 java decompiler 툴을 통해 디컴파일 * java decompiler 사용방법 링크

 

 

java decompiler 툴을 통해 디컴파일한 코드를 복사해주도록 하자.

이렇게 복사한 코드를 가지고 같은 같은 경로에 CopyDual.java파일을 생성한 뒤 붙여넣고

빌드하여 CopyDual.class파일을 생성해준다.

 

 

그런 다음 메서드를 생성해주도록 하자. 나는 아래와 같이 메서드를 생성해주었음.

 

 

2) .java파일 수정

package org.postgresql.copy;

public class CopyDual {
	  public void getPrint() {
	    System.out.println("i_love_mochi");
	  }	
}

//기존 interface였던 CopyDual을 클래스로 변경하고 콘솔에 로그를 찍는 함수 추가함

 

이렇게 한후, 프로젝트를 빌드( 프로젝트 클린후 서버구동 )해주면 .class파일이 생성되는 것을 확인할 수 있다.

 

 

3) .java파일을 .class파일로 컴파일

 

 

CopyDual.java파일 우클릭 - Run AS - Run Configuration

 

 

클래스 파일 생성

 

 

이렇게 클래스파일 경로로 가면 클래스파일이 정상적으로 생성된 것을 확인 할 수 있다. 이제 이 클래스파일이

정상적으로 수정이 된 클래스 파일인지 확인하기 위해 다시 java decompiler를 통해 확인해보자.

 

 

확인해보니 CopyDual 클래스에 getPrint메서드가 제대로 선언된 것을 확인 할 수 있다. 

 

 

4) 수정한 .class파일로 .jar파일 재생성

 

 

 

폴더 압축

 

 

이렇게 수정한 클래스파일을 넣은 폴더를 다시 .jar파일로 압축한 뒤, 변경된 .jar파일을 기존의 .jar파일과

바꿔주면 된다!

 

기존에 있던 postgresql.jar파일 삭제후 새로 수정된 postgresql.jar파일을 추가해준다.

 

 

이제 직접 CopyDual.class안에 만든 getPrint()함수를 호출해보도록 하자.

 

호출

 

TestJava.java를 만들어 CopyDual.class에 만든 getPrint함수를 호출하였다.

 

 

 

728x90
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!