내 코드에서 주석 처리를 수행하기 위해 maven 프로젝트에서 maven-compiler-plugin
을 사용하고 있습니다. <fork>true</fork>
구성 옵션을 추가 할 때까지 작동했습니다.fork = true를 지정하면 maven-compiler-plugin이 주석 처리를 수행하지 않습니까?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<dependencies>
<!-- Add dependency on the annotation processor -->
<dependency>
<groupId>x.y.z</groupId>
<artifactId>my-processor</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
가 내 프로세서-1.0.jar 파일이 META-INF/서비스/javax.annotation.processing.Processor 포함
의 pom.xml 파일은 다음있다 파일을 컴파일하여 런타임시 javac
컴파일러에서 발견 할 수 있습니다. 나는이 구성 MVN 깨끗한 컴파일을 실행하면
, 나는 예상대로 주석 프로세서가 실행하고, \ 생성 - 소스 \ 그의 주석 대상으로 디렉토리에 코드를 넣어 생성 된 것을 알 수있다. 내가 플러그인 구성에 <fork>true</fork>
옵션을 추가하면
는하지만, 그때 주석 프로세서가 실행되지 않는 것을 관찰하고 어떤 코드는 대상 \ 생성 - 소스 \ 주석 디렉토리에 존재하지 않는다.
maven-compiler-plugin
버전 2.5.1, 3.0 및 3.1 (3.x 버전에서 주석 처리기 병을 발견 할 수 있도록 구성에 <forceJavaCompilerUser>true</forceJavaCompilerUser>
옵션을 추가해야 함)을 시도했습니다. 버전 2.5.1, 3.0,
<configuration>
...
<annotationProcessors>
<annotationProcessor>x.y.z.MyProcessor</annotationProcessor>
</annotationProcessors>
...
</configuration>
다시 및 구성 옵션이 분기 지정하지 않은 경우 3.1, 주석 프로세서가 호출 될 것이다 :
는 또한 명시 적으로 주석 프로세서를 지정했습니다.<fork>true</fork>
옵션을 지정하면 주석 프로세서가 실행되지 않습니다.
또한 종속 프로세서 종속성이로드되었는지 확인하기 위해 maven-compiler-plugin
종속성 외부에 x.y.z:my_processor
종속성을 추가했습니다.
maven-compiler-plugin
이 <fork>true</fork>
으로 구성된 경우 주석 처리가 여전히 작동해야합니까? 또는 플러그인을 잘못 구성 했습니까?
내가 <fork>true</fork>
를 사용하여 주석 처리없이 컴파일하려면 별도의 실행에 컴파일 (예를 들어, 하나 개의 실행을 분할하지 않으 주, 두 번째 실행 이후 <fork>false</fork>
을 사용하는 경우에만 할 주석 처리 또 다른 실행은 전체 소스를 다시 컴파일 다시 말하지만,이 문제를 해결할 방법이없는 한, 수천 개의 소스 파일을 다룰 때 좋지 않습니다.)
JDK 1.7.0_45를 사용하고 있습니다.
1
는 사실이 솔루션은 플러그인의 의존성에서 정상 의존성에 프로세서 의존성을 이동하고 편집 번호 : 나는이 테스트했지만 내가 가진 거라고 생각
<dependencies>
<dependency>
<groupId>x.y.z</groupId>
<artifactId>my-processor</artifactId>
</dependency>
...
</dependencies>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
</configuration>
</plugin>
</plugin>
생성 된 코드의 존재 여부를 찾는 대신 콘솔 출력 (프로세스가 분기 될 때 나타나지 않음)을 찾고있었습니다.
이 대답이 정확하다면 – softarn
나는 똑같은 문제가있다 - 필자는 annotation 프로세서 인 JAR (artifact ** apt **) = 플러그인 (Artifact ** apt-plugin **의 Mojo)에서 사용한다. 이 주석 처리기를 사용하여 Javac 도구를 실행하기 만하면됩니다. 나는 프로젝트 X에서 그것을 사용한다. ** apt **에 대한 의존성이 프로젝트 의존성에있을 때, 괜찮다. 그러나 플러그인에서'종속/의존성'을 사용하면 효과가 없습니다. Maven 모델은'plugin'의'dependencies'는 ... "이 프로젝트가 플러그인의 클래스 로더에 추가해야하는 추가 의존성입니다." 하지만 플러그인을 디버깅 할 때 모든 프로젝트에 내 의존성을 제공하지 않습니다 .get ... – virgo47