2016-08-12 3 views
3

저는 주석 처리가 처음이에요. 메이븐에서 자동화하려고합니다. 내 pom.xml 파일에 넣고했습니다메이븐 주석 처리 프로세서를 찾을 수 없습니다.

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <annotationProcessors> 
        <annotationProcessor> 
         co.aurasphere.revolver.annotation.processor.InjectAnnotationProcessor</annotationProcessor> 
        <annotationProcessor> 
         co.aurasphere.revolver.annotation.processor.RevolverContextAnnotationProcessor</annotationProcessor> 
       </annotationProcessors> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 

문제는 내가이 CompilationFailureException를 얻을 프로젝트를 빌드 할 때 메이븐은 프로세서를 찾을 수 있기 때문이다.

나는 플러그인과 관련된 의존성을 푸는 것으로 해결 된 이와 같은 다른 질문을 발견했습니다. 나는 그것을 시도했다. 그러나 나를 위해 아무것도 바뀌지 않았다.

내가 누락 된 항목이 있습니까?

감사합니다.

프로세서와 주석을 모두 포함하는 다른 프로젝트에 내 의존성이다 여기

편집 :

<dependencies> 
    <dependency> 
     <groupId>co.aurasphere</groupId> 
     <artifactId>revolver-annotation-processor</artifactId> 
     <version>0.0.3-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

편집 2 : 추가 조사 후

, 나는하기로 결정 프로세서 JAR (Maven으로 빌드 됨)을 디 컴파일하면 클래스가 없습니다. 어떤 이유로 Maven은 클래스를 JAR로 컴파일하지 않기 때문에 클래스가 발견되지 않습니다. 나는 그 빌드에서 무엇이 잘못되었는지 알아 내려고 시도했다. (이것은 이전에는 결코 일어난 적이 없었고, Maven을 잠시 사용했다 ...).

우선, 해당 프로젝트의 패키지는 jar입니다. 클래스는 모두 src/main/java에 있습니다. pom.xml에서 클래스 경로와 소스 경로가 동일하다는 것을 확인했습니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>co.aurasphere</groupId> 
<artifactId>revolver-annotation-processor</artifactId> 
<version>0.0.3-SNAPSHOT</version> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject --> 
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity --> 
    <dependency> 
     <groupId>org.apache.velocity</groupId> 
     <artifactId>velocity</artifactId> 
     <version>1.7</version> 
    </dependency> 


</dependencies> 

편집

Here의 메이븐의 출력 (3) 깨끗한 프로세서 프로젝트에 설치 :

다음은 프로세서 치어입니다. 불행히도 출력이 너무 길어서 좋지 않다고 생각 되더라도 외부 링크를 게시해야했습니다. EclipseFile System : 여기에 4

EDIT 내 종속 계층 구조의 스크린 샷이다.

원래이 프로젝트는 Eclipse의 간단한 Java 프로젝트로 생성 된 다음 Maven 프로젝트로 변환 되었기 때문에 새로운 Maven 프로젝트를 만들고 새로운 프로젝트로 이클립스 플러그인 문제를 해결하기 위해 모든 것을 옮겼습니다. 뭔가를 엉망으로 만들었지 만 그 오류는 여전히있었습니다.

+3

'co.aurasphere.revolver ...'패키지에 의존성을 정의한 방법을 게시하십시오. 그것들은 ** 당신이 컴파일하려고하는 프로젝트 안 **에 있지 않습니까? – ppeterka

+2

주석 프로세서 *를 사용하는 프로젝트를 빌드하기 전에 주석 프로세서 *를 빌드해야합니다. – chrylis

+0

주석과 프로세서는 OP와 같이 가져온 다른 프로젝트에 있습니다 (편집했습니다). 전에 그 프로세스를 만들었고 프로젝트 (항아리, IDK가 아닌 이유)로 이클립스의 Maven 종속성 아래에서 가져 오기를 봅니다. 프로세서 프로젝트는 jar로 정의되어 있습니다 Aurasphere

답변

3

나는 직접 답변을 찾았습니다. 문제는 주석 프로세서 클래스의 구성으로 META-INF/services /에있는 javax.annotation.processing.Processor 파일이라는 것을 알았습니다. 이 문제를 해결하기 위해 내 프로세서 프로젝트의 pom.xml 파일 구성에 다음을 추가했다 :

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <compilerArgument> 
        -proc:none 
       </compilerArgument> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

이 메이븐 실제 항아리에 클래스를 구축하고 문제를 해결 할 수 있습니다. 이것이 버그인지 아닌지는 모르겠지만 확실히 이상하게 보입니다. 도움을 주신 모든 분들께 감사드립니다!

1

가장 쉬운 방법은 리볼버 - 주석 프로세서 아티팩트의 META-INF/services 디렉토리에 주석 프로세서를 등록하는 것입니다. Maven 컴파일러 구성이 필요 없습니다.

이미 등록되어 있는지 확인하고, 등록되어 있지 않은 경우 소스 코드를 제어하면 직접 등록하십시오.소스 코드를 제어 할 경우

https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html

는 또한 주석과 같은 유물에 프로세서를 패키징하는 것이 좋습니다. 이와 같이 주석 중 하나를 사용할 때마다 주석 처리기도 컴파일러에서 선택됩니다.

+0

사실 나는 이미이 작업을 수행 할 수 있음을 알고 있지만 프로젝트에 Maven을 사용하고 있기 때문에 javac 또는 Eclipse를 사용하여 빌드하지 않았으므로이 빌드를 Maven 빌드 – Aurasphere

+1

Ähm과 통합하고 싶습니다. Maven Compiler Plugin은 다음을 사용합니다. javac ... 내가 설명한 방법은 Maven이 프로세서를 자동으로 선택할 때 별도의 구성없이 바로 사용할 수있다. – Puce