inflearn logo
강의

Course

Instructor

More Java, different ways to manipulate code

javaagent practice

gradle 사용하시는 분 도움

764

hosung

7 asked

4

일단 새로운 프로젝트 만들고 premain 추가해주는 것 까진 강의를 그대로 따라하시면 됩니다.

manifest plugin 부터 조금 차이가 있어서 거기부터 설명하면,

  1. build gradle 에 다음과 같이 추가한다.

tasks.named('jar') {
	manifest {
		attributes(
			'Implementation-Title': project.name,
			'Implementation-Version': project.version,
			'Premain-Class' : "com.java.magicianAgent.MagicianAgent",
			'Can-Redefine-Classes' : true,
			'Can-Retransform-Classes' : true)
	}
}
  1. 터미널에서 다음 명령어를 통해 build 한다

./gradlew clean build
  1. build.libs file 안에 있는 jar file 을 확인한다. (옵션)

강의에서와 마찬가지로 zip file 로 변경하면 확인가능합니다. 저같은 경우 SNAPSHOT.jar 과 SNAPSHOT-plain.jar 이렇게 2개가 생겼는데 SNAPSHOT.jar 은 제가 spring boot 로 실행서 그런지 관련 설정들이 보이고 SNAPSHOT-plain.jar 이 맞는거 같더라구요.

  1. jar file 의 절대 경로를 복사해 VM option 에 추가한다.

여기서부터는 다시 강의와 같습니다. VM option 이 안보이시면 오른쪽에 Modify options 클릭하면 add vm options 라고 보이실 겁니다.

이상한거나 궁금한거 있으시면 말씀해주세요.

gradle 을 쓰시는 모든 분들도 마술을 성공시킵시다 하하

java spring

Answer 1

1

communityai8509

안녕하세요, 인프런 AI 인턴이에요.

gradle을 사용하신다면 새로운 프로젝트를 만들고 premain을 추가하는 부분은 강의를 그대로 따라하시면 됩니다. 그러나 manifest plugin을 추가하는 부분에서 조금 차이가 있어요. build.gradle 파일에 다음과 같이 추가해주세요.

tasks.named(‘jar’) {
manifest {
attributes(
‘Implementation-Title’: project.name,
‘Implementation-Version’: project.version,
‘Premain-Class’ : “com.java.magicianAgent.MagicianAgent”,
‘Can-Redefine-Classes’ : true,
‘Can-Retransform-Classes’ : true)
}
}

그 후 터미널에서 다음 명령어를 사용하여 build를 진행하시면 됩니다.
./gradlew clean build

build/libs 폴더 안에 있는 jar 파일을 확인하실 수 있습니다. 원하신다면 zip 파일로 변경하여 확인하실 수도 있습니다. 제가 이해한 바로는 SNAPSHOT.jar 파일이 spring boot로 실행했을 때의 설정을 포함하고 있는 것이고, SNAPSHOT-plain.jar 파일이 일반적인 실행에 사용되는 파일이라고 생각됩니다.

jar 파일의 절대 경로를 복사하여 VM 옵션에 추가해주세요. VM 옵션이 보이지 않는다면 오른쪽에 있는 “Modify options”를 클릭하면 “add vm options”라는 항목이 보입니다.

이후부터는 다시 강의와 같은 방법으로 진행하시면 됩니다. 만약 이상한 점이나 궁금한 점이 있으시면 언제든지 말씀해주세요. gradle을 사용하시는 분들 모두 마술을 성공시켜봅시다! 하하요.

클래스 로더가 메소드 영역에 저장하는 것은 바이트코드인가요?

1

83

1

실제 개발 단계에서 이 같은 지식들을 적용할 기회가 있을까요?

0

102

1

코틀린 컴파일에 대해서

0

218

1

RuntimeException

0

340

1

Annotation processor에서 element type을 제한했는데도 다른 타입으로 컴파일이 됩니다...이상하게도..

0

399

1

CGLib를 따라 해보면서 문제점이 있으며, 해결법입니다. JDK17입니다.

6

865

0

Spring Data JPA 동적 프록시를 사용 질문

0

419

1

어노테이션 프로세서 활용 예와 관련해 질문 있습니다.

0

503

1

"자바 언어가 플랫폼에 독립적이다" 라는 것에 대해 옳게 이해했는지 궁금합니다!

1

1133

1

'클래스 로더' 강의에서 클래스 로딩을 설명할 때 잘못된 것 같아 질문드립니다.

3

1258

2

metaspace 질문드립니다.

2

394

0

소스컴파일시점에 MagicMojaProcessor가 사용되면 안되는이유

0

424

0

다이나믹 프록시에서 리플렉션이 어떻게 사용되는거죠?

0

468

1

다이나믹 프록시의 단점

0

350

0

new 와 constructor.newInstance();의 차이

0

663

0

두번 실행해야하는 이유

0

472

0

제가 설명한게 맞는지 봐주실 수 있나요?(jvm설명)

0

445

0

JIT 컴파일러와 인터프리터

1

1011

1

Method.invoke()

0

426

1

site 폴더내에 jacoco 폴더가 생기지 않습니다.

0

987

1

메모리 영역의 구조 질문

0

449

1

GC 설명부분 질문드립니다.

0

489

1

jit 와 인터프리터 질문

1

394

1

JVM 메모리 구조에 대해 공부하다가 질문 드립니다.

0

515

1