Я настраиваю CustomAnnotationProcessor в Java 17 во время компиляции. Я обнаружил, что способ добиться этого — добавить блок в pom.xml. Решение показывает использование
-proc:only
Как правильный способ запуска обработчиков аннотаций.
Проблема в том, что когда я устанавливаю -proc:only , я получаю эта ошибка:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project entity-validator-api-archetype: Compilation failure
[ERROR] Bad service configuration file, or exception thrown while constructing Processor object: javax.annotation.processing.Processor: Provider com.eva.CustomAnnotationProcessor not found
Но если использовать -proc:none
-proc:none
Аннотации обрабатываются.
...
Processing test...
Processing test...
[INFO] Processing: DemoApplication with value: Demo Value
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.356 s
[INFO] Finished at: 2024-09-23T06:56:05-05:00
[INFO] ------------------------------------------------------------------------
Я прочитал следующее:
-proc:none: Отключает всю обработку аннотаций.
-proc:only: Предназначен для запуска только обработчиков аннотаций.
Можете ли вы объяснить, почему он работает инвертированным способом?
Некоторое поведение Java это нелегко объяснить.
Файлы:
CustomAnnotation.java
package com.eva;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Target(ElementType.TYPE) // Use on classes
@Retention(RetentionPolicy.SOURCE) // Processed at the source level
public @interface CustomAnnotation {
String value();
}
CustomAnnotationProcessor.java
package com.eva;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.Element;
import javax.tools.Diagnostic;
import java.util.Set;
@SupportedAnnotationTypes("com.eva.CustomAnnotation") // Annotation to process
@SupportedSourceVersion(SourceVersion.RELEASE_17) // Java version
public class CustomAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set
4.0.0
com.eva
entity-validator-api-archetype
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
3.3.2
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter
jakarta.platform
jakarta.jakartaee-api
10.0.0
provided
mysql
mysql-connector-java
8.0.33
runtime
org.springframework.boot
spring-boot-devtools
runtime
org.bouncycastle
bcprov-jdk15on
1.70
org.springframework.boot
spring-boot-starter-mail
org.springframework.boot
spring-boot-starter-freemarker
jakarta.persistence
jakarta.persistence-api
3.1.0
org.hibernate.orm
hibernate-core
6.3.0.Final
org.springframework
spring-context
org.reflections
reflections
0.10.2
17
17
UTF-8
src/main/resources
org.apache.maven.plugins
maven-compiler-plugin
3.13.0
default-compile
-proc:none
com/eva/CustomAnnotationProcessor.java
compile-project
compile
compile
17
17
Подробнее здесь: https://stackoverflow.com/questions/790 ... nnotations