인프런 커뮤니티 질문&답변

쫀쫀박님의 프로필 이미지
쫀쫀박

작성한 질문수

더 자바, 코드를 조작하는 다양한 방법

에노테이션 프로세서 이용중 문의드립니다.

작성

·

194

0

 안녕하세요 좋은 강의 잘 들었습니다.

최근 애노테이션 프로세서를 이용해서 실습하는데 저는 메서드에 애노테이션을 붙여서 사용하는 연습을 했습니다.

해당 클래스의  클래스명을 받아오기 위해 '((Symbol.MethodSymbol) element).owner.name.toString()'로 클래스 명을 가져오는 것을 호출하려고 하는데 IDE상에서는 아무런 문제가 없는데 maven install 할 때 `package com.sun.tools.javac.code does not exist` 에러가 떠서 계속 빌드가 안되네요.

아 참고로 java8을 사용 중이고 adoptopenJDK를 사용중입니다.

분명히 tools.jar에 있는 패키지이고 분명 포함돼있는데 왜 빌드가 안되는지 모르겠습니다.

혹시 어떻게 해결하면 좋을까요?

답변 3

0

백기선님의 프로필 이미지
백기선
지식공유자

Element 인터페이스에 있는 getEnclosingElement()를 사용해보세요.

0

쫀쫀박님의 프로필 이미지
쫀쫀박
질문자

public interface AnnotationTest {

@Annotation

int test(int value);
}

답변 감사합니다.

일단 클래스패스에 tools.jar를 추가했는데도 계속 이렇게 발생을 하네요.

그래서 maven runner로 사용되는 JRE의 버전을 11로 올렸더니 정상적으로 컴파일이 됩니다.

그리고 위와 같이 메서드에서 선언할 경우 저 메서드를 가지고 있는 클래스인 'AnnotationTest' 정보를 가져오기 위해서 저렇게 사용한 거였는데요. 혹시 다른 방법이 있을까요?

0

백기선님의 프로필 이미지
백기선
지식공유자

우선은 왜 저 패키지에 들어있는 클래스가 필요한지 모르겠네요. 만드신 클래스의 이름을 가져오는데 변수 타입을 잘못 선언하신거 아닌가요? JDK에 들어있는 tools.jar를 IDE에서는 참조하지만 메이븐을 실행할 때 사용하는 JRE에는 tools.jar가 없어서 그런 빌드 에러가 나는거 같은데 tools.jar를 클래스패스에 추가하면 해결되겠지만 그보다는 근본적으로 저 안에 있는 클래스를 왜 참조하는지, 정말 필요한건지 부터 살펴보시면 좋을거 같습니다.

쫀쫀박님의 프로필 이미지
쫀쫀박

작성한 질문수

질문하기