GitHub user ppkarwasz added a comment to the discussion: 
java.lang.IllegalArgumentException: The `GraalVmProcessor` annotation processor 
is missing the required `log4j.graalvm.groupId` and `log4j.graalvm.artifactId` 
options

Hi @kwakeroni,

There’s **no dedicated flag** to turn `GraalVmProcessor` off, since you can 
effectively control it through standard compiler options.

As @ftreede mentioned, since Java 6, `javac` has **automatically loaded** all 
annotation processors found on the annotation processor path (which, by 
default, is just the classpath). This implicit behavior has been flagged as a 
security concern and is now **deprecated as of Java 23** (see [this JDK 23 
heads-up](https://inside.java/2024/06/18/quality-heads-up/) and the [excellent 
write-up 
here](https://javapro.io/2024/11/19/discovering-the-perfect-java-supply-chain-attack-vector-and-how-it-got-fixed/)).

Keeping the spirit of the changes in JDK 23, we intentionally make 
`GraalVmProcessor` fail with an **`ERROR`** (instead of silently ignoring it or 
logging a warning) because:

* It helps developers become immediately aware that a new annotation processor 
is active.
* It forces an **explicit decision**: either configure it properly (opt-in) or 
disable it (opt-out).

### ✅ How to Opt-Out

Depending on whether you use **other annotation processors**, you can take one 
of two approaches:

#### 1. You **don’t** use other annotation processors

You can simply disable all annotation processing:

```xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <!-- Completely disable annotation processing -->
    <proc>none</proc>
  </configuration>
</plugin>
```

#### 2. You **do** use other annotation processors

In this case, declare them explicitly and isolate your annotation processor 
classpath:

```xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <annotationProcessorPaths>
      <!-- Include only specific processors, e.g. Log4j’s PluginProcessor -->
      <path>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.25.0</version>
      </path>
    </annotationProcessorPaths>
    <annotationProcessors>
      <!-- List processors explicitly -->
      
<annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
    </annotationProcessors>
  </configuration>
</plugin>
```

This ensures that only the processors you trust and need are loaded—nothing 
more, nothing less.

### ✅ How to Opt-In

An example on to use both `PluginProcessor` and `GraalVmProcessor` is available 
on the [documentation page you 
site](https://logging.apache.org/log4j/2.x/manual/plugins.html#plugin-registry)

GitHub link: 
https://github.com/apache/logging-log4j2/discussions/3755#discussioncomment-13512010

----
This is an automatically sent email for dev@logging.apache.org.
To unsubscribe, please send an email to: dev-unsubscr...@logging.apache.org

Reply via email to