Почему -proc:none обрабатывает пользовательские аннотации?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему -proc:none обрабатывает пользовательские аннотации?

Сообщение Anonymous »

Я настраиваю 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»