2017-03-08 3 views
0

현재 Intellij 15.0.6의 Gradle 3.3 프로젝트에서 작업 중입니다.주석 처리기를 사용하여 클래스 패스에 XML 리소스 생성

Gradle APT plugin을 사용하여 내 클래스 경로에 주석 처리기를 추가하고 있습니다.

Java 클래스 파일을 생성 할 때 제대로 작동하지만 빌드 디렉토리의 생성 된 디렉토리에있는 resources 디렉토리에서 XML 소스를 생성 할 수 있어야합니다. 당신이 볼 수 있듯이

Project Build Directory Image

, 그것은 내가이 문제를 일으킬 수있는 것으로 판단되는 resources 디렉토리를 포함하지 않습니다

여기에 현재 나의 빌드 디렉토리 구조입니다.

내가 ./gradlew assemble를 통해 내 주석 프로세서를 실행받는 현재 예외는 다음과 같습니다 java.lang.IllegalArgumentException: Resource creation not supported in location CLASS_PATH

내가 xml 파일 생성 내 주석 프로세서에서 사용하고 코드 :

FileObject source = processingEnv.getFiler() .createResource(StandardLocation.CLASS_PATH, "", "ap-test-2.html");

참고 : HTML 확장을 테스트로 사용했지만 XML은 동일한 결과를 산출해야합니다.

javax.tools.StandardLocation은 다른 출력 위치를 가지고 :

SOURCE_OUTPUT 위치 src/apt/main 내에서 생성 된 자바 클래스와 같은 패키지 내에서 XML을 배치했다. 그러나 이것은 내 원하는 행동이 아닙니다. 나는 그들을 수업 시간 내에 거주시킬 필요가있다.

광범위한 연구 끝에 다른 곳에서 논의 된이 예외를 발견하지 못했습니다.

도움을 주시면 감사하겠습니다. 이 질문을 읽어 주셔서 감사합니다.

답변

1

StandardLocation.CLASS_PATH은 출력용이 아닙니다. 유일한 출력 위치는 SOURCE_OUPUT (build/generated/source/apt/… 폴더), CLASS_OUTPUT (표준 Gradle build/classes/…) 및 NATIVE_HEADER_OUPUT입니다. https://docs.oracle.com/javase/8/docs/api/javax/tools/StandardLocation.html

JavaC는 클래스 대 리소스 출력에 대한 개념이 없지만 편집하는 동안 주석 프로세서를 실행하면 CLASS_OUTPUT이 작동합니다 (Gradle은 모든 것을 최종 디렉토리/JAR로 복사해야 함). https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html

+0

답장을 보내 주셔서 감사합니다. 흥미롭게도 Intellij는'build' 클래스 경로 파일을'classes'와'resources' 디렉토리로 구분합니다. 내 프로세서는'CLASS_OUTPUT'으로 위치를 변경 한 후에 HTML을'classes' 디렉토리에 추가했습니다. 이것을 더 시험해보고 내가 찾은 것을 당신에게 알려줄 것입니다. –

+1

Intellij는이 두 디렉토리를 병합하여 클래스 패스에 추가하는 것으로 보이므로 위치를 'CLASS_OUTPUT'으로 설정하면 이론적으로 작동합니다. 나는 이것이 사실인지 확인하기 위해 내 프로세서로 작업하는 MVP를 얻으려고 노력할 것이다. –