2012-10-12 2 views
8

질문은 분명한 것처럼 보이지만, 구현은 나에게 꽤 어렵습니다.Ant를 사용하여 주석 프로세서를 컴파일하는 방법은 무엇입니까?

내 목표는 다른 클래스 주석 프로세서에 의해 생성 필요로하는 일부 클래스를 컴파일 Ant 빌드 스크립트를에를 작성하는 것입니다. 사용자 정의 주석이 있고 프로세서 구현 (AbstractProcessor 클래스에서 상속)입니다.

  1. 가 새로 생성하는 일부 주석 클래스를 통해 주석 프로세서
  2. 실행을 컴파일러를 컴파일 : 내가 알고있는 것처럼

    내가 할 필요가있다.

  3. 클래스

코드 (1 단계 & 2) 생성 요구 클래스를 컴파일


<target name="compileAnnotationProcessor">   
    <javac destdir="${OUTPUT_DIR}" 
      debug="true" 
      failonerror="true" 
      includeantruntime="false" 
      classpath="${java.class.path}"> 
     <src> 
      <pathelement path="${PROJECT_DIR}/tools/src"/> 
     </src> 

     <include name="/path/to/annotation/processor/package/**"/> 
    </javac> 
</target> 

<target name="generateFilesWithAPT" depends="compileAnnotationProcessor"> 
    <javac destdir="${OUTPUT_DIR}" 
      includeantruntime="false" 
      listfiles="false" 
      fork="true" 
      debug="true" 
      verbose="true"> 
     <src> 
      <pathelement path="${PROJECT_DIR}/common/src/"/> 
     </src> 
     <include name="/path/to/files/to/compile/**"/> 
     <classpath> 
      <pathelement path="${OUTPUT_DIR}"/> 
      <pathelement path="${java.class.path}"/> 
     </classpath> 

     <compilerarg line="-proc:only"/> 
     <compilerarg line="-processorpath ${OUTPUT_DIR}/path/to/annotation/processor/package/annProcessorImplement"/> 
    </javac> 
</target> 

실은 제 태스크 잘 수행되고,하면 컴파일한다. 주석 프로세서 구현을위한 클래스 파일. 2 번째 작업에서 멈추고 있습니다.

개미는 말한다 : 내가 잘못 뭐하는 거지 Annotation processing without compilation requested but no processors were found.

? 어노테이션 프로세서 클래스를 .jar에 두어야할까요? 또는 .class 확장자가 -processorpath 인수 인 파일 이름을 제공 하시겠습니까? 나는 몇 가지 옵션을 시도했지만 아무것도


주 .. 할 수 없습니다 :

내가 대신 apt 툴뿐만 아니라 com.sun.mirror API는 사용되지 않습니다 apt 하나 documentation 때문에 주장의 개미 javac 작업을 사용하고 있습니다. 나는 또한 question을 살펴 봤지만 올바른 방법으로 프로세서를 컴파일하는 방법에 대한 정보는 없습니다.

내가 사용 :

  • 자바 1.6
  • 개미 1.8.2

답변

4

내 일반적인 접근 방식은 다음과 같습니다

  • 이 주석 프로세서와 함께 주석을 팩 자체 항아리
  • ME를 통해 주석 처리기를 등록하십시오. 해당 항아리에있는 TA-INF/services

그런 다음 주석에 대한 종속성이있는 곳이면 추가 구성없이 주석 프로세서가 자동으로 선택됩니다.

+0

에 주석 프로세서를 추가하지 않고도 동일한 작업을 수행 할 수 있습니까?항아리? – ivstas

+0

적어도 주석 처리기는 일반적으로 주석 처리기를 컴파일 할 때 주석 처리가 비활성화되어야하므로 주석 처리기가 주석 처리기와 다른 항아리에 있어야합니다. 어노테이션과 어노테이션 프로세서를 두 개의 개별적인 jar 파일로 가질 수 있지만, 어노테이션을 처리하기 위해 두 파일 모두에 대한 의존성을 선언해야한다. – Puce

+0

명확하게 말하면, 항아리에는 주석과 주석 처리기 만 포함해야한다는 의미는 아니지만 주석 처리기에서 처리해야하는 클래스는 포함하면 안됩니다. – Puce