apache/maven · info

Enable verbose output (-X) to see precisely which goals are

Error message

Enable verbose output (-X) to see precisely which goals are not marked as thread-safe.

What it means

Closing hint of the non-debug Maven-4 concurrency report: after listing non-v4 plugins, BuildPlanExecutor logs 'Enable verbose output (-X) to see precisely which goals are not marked as thread-safe.' plus a separator line. The wording is inherited from the classic thread-safety report but here points at goal-level detail of the v4-API check.

Source

Thrown at impl/maven-core/src/main/java/org/apache/maven/lifecycle/internal/concurrent/BuildPlanExecutor.java:342

                    }
                    if (logger.isDebugEnabled()) {
                        Set<MojoDescriptor> unsafeGoals = unsafeExecutions.stream()
                                .map(MojoExecution::getMojoDescriptor)
                                .collect(Collectors.toSet());
                        logger.warn("The following goals are not Maven 4 goals:");
                        for (MojoDescriptor unsafeGoal : unsafeGoals) {
                            logger.warn("  " + unsafeGoal.getId());
                        }
                    } else {
                        Set<Plugin> unsafePlugins = unsafeExecutions.stream()
                                .map(MojoExecution::getPlugin)
                                .collect(Collectors.toSet());
                        logger.warn("The following plugins are not Maven 4 plugins:");
                        for (Plugin unsafePlugin : unsafePlugins) {
                            logger.warn("  " + unsafePlugin.getId());
                        }
                        logger.warn("");
                        logger.warn("Enable verbose output (-X) to see precisely which goals are not marked as"
                                + " thread-safe.");
                    }
                    logger.warn(MultilineMessageHelper.separatorLine());
                }
            }
        }

        void execute() {
            try (var phase = executor.phase()) {
                plan();
                executePlan();
            } catch (Exception e) {
                session.getResult().addException(e);
            }
        }

        @Override
        public void close() {

View on GitHub (pinned to e4093d4e12)

Solutions

  1. Re-run with -X and read the 'The following goals are not Maven 4 goals:' section for exact ids.
  2. Upgrade the identified plugins or temporarily drop -T.
  3. Use help:describe -Dplugin=<g:a> -Ddetail to inspect a plugin's goals and their API level.

Example fix

# before
mvn -T 4 install   # 'Enable verbose output (-X) ...'

# after
mvn -X -T 4 install 2>&1 | grep -A15 'not Maven 4 goals'
Defensive patterns

Strategy: validation

Validate before calling

# guard: archive the goal-level v4 report for triage
mvn -T 1C install 2>&1 | tee build.log || true
(mvn -X -T 1C install 2>&1 | grep -A30 'not Maven 4 goals') > v3-goals.txt || true

Prevention

When it happens

Trigger: Automatically emitted whenever the plugin-level 'not Maven 4 plugins' list is printed (threads > 1, unsafe v3 executions present, debug disabled).

Common situations: Maven 4 adopters deciding which exact goals block safe concurrency; support/triage workflows needing per-goal evidence.

Related errors


AI-assisted analysis of apache/maven@e4093d4e12 (2026-08-21). Data as JSON: /api/errors/3afc5b0fc5415a3a. Report an issue: GitHub.