quarkusio/quarkus · error · RuntimeException
quarkus update artifacts require multiple rewrite plugin ver
Error message
quarkus update artifacts require multiple rewrite plugin versions: ${propRewritePluginVersion} and ${pluginVersion} What it means
While fetching recipes for a `quarkus update` operation, QuarkusUpdatesRepository.fetchRecipes() resolves the rewrite plugin version property for each artifact/build tool. If different artifacts in the same batch declare conflicting rewrite-maven/gradle-plugin versions, the method aborts with RuntimeException because a single consistent plugin version is required to run the update.
Source
Thrown at independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/update/rewrite/QuarkusUpdatesRepository.java:101
List<String> newRecipes = fetchUpdateRecipes(log, resourceLoader, "quarkus-updates",
recipeDirectoryNames);
recipes.addAll(newRecipes);
final Properties props = resourceLoader.loadResourceAsPath("quarkus-updates/", p -> {
final Properties properties = new Properties();
final Path propPath = p.resolve("recipes.properties");
if (Files.isRegularFile(propPath)) {
try (final InputStream inStream = Files.newInputStream(propPath)) {
properties.load(inStream);
}
}
return properties;
});
final String pluginVersion = getPropRewritePluginVersion(props, buildTool);
if (propRewritePluginVersion == null) {
propRewritePluginVersion = pluginVersion;
} else if (!propRewritePluginVersion.equals(pluginVersion)) {
throw new RuntimeException(
"quarkus update artifacts require multiple rewrite plugin versions: " + propRewritePluginVersion
+ " and " + pluginVersion);
}
if (log.isDebugEnabled()) {
log.debug(String.format(
"=> %d specific recipe" + (recipes.size() != 1 ? "s" : "")
+ " found (compatible with OpenRewrite %s plugin version: %s)",
recipes.size(),
buildTool,
propRewritePluginVersion));
} else {
log.info(String.format(
"=> %s specific recipe" + (recipes.size() != 1 ? "s" : "") + " found",
MessageFormatter.green(String.valueOf(recipes.size()))));
}
} catch (BootstrapMavenException e) {
throw new RuntimeException("Failed to resolve artifact: " + gav, e);View on GitHub (pinned to e1c734241f)
Solutions
- Use update artifacts that all come from the same Quarkus stream/version so their rewrite plugin versions match.
- Rebuild the custom recipe artifact against the same rewrite-maven-plugin version as the other artifacts.
- Update Quarkus / the CLI so the generated update artifacts and the rewrite plugin versions are aligned.
- Run `quarkus update` separately for each artifact group that requires a different plugin version.
Example fix
// before: mixing streams quarkusUpdate --update-versions=3.2 --artifact=io.quarkus:quarkus-update-recipes:3.8 // after: artifact version matches the target stream quarkusUpdate --update-versions=3.2 --artifact=io.quarkus:quarkus-update-recipes:3.2
Defensive patterns
Strategy: validation
Validate before calling
// Ensure all artifacts resolve from one Quarkus stream and pin one rewrite plugin version // in each artifact's quarkus-update-properties before mixing them in one update run.
Try / catch
try {
FetchResult r = repo.fetchRecipes(artifacts, buildTool, ...);
} catch (RuntimeException e) {
if (e.getMessage() != null && e.getMessage().contains("multiple rewrite plugin versions")) {
log.error("Update artifacts conflict on rewrite plugin version; use artifacts from the same stream.");
}
} Prevention
- Use update artifacts that all match the target Quarkus stream version.
- Pin the same rewrite-maven-plugin/rewrite-gradle-plugin version in custom recipe artifacts.
- Keep the Quarkus CLI and update artifacts versions aligned.
- Split update runs by stream if you must use artifacts from different sources.
When it happens
Trigger: Calling fetchRecipes with multiple update artifacts whose quarkus-update-properties files define different values for the rewrite plugin version property (PROP_REWRITE_MAVEN_PLUGIN_VERSION / PROP_REWRITE_GRADLE_PLUGIN_VERSION), so propRewritePluginVersion differs from pluginVersion on a later artifact.
Common situations: Mixing update recipe artifacts built against different Quarkus versions (e.g. one older stream artifact plus a current one) in the same `quarkus update` invocation; a custom recipe artifact pinning its own rewrite plugin version that disagrees with the platform-generated one.
Related errors
- Quarkus extension deployment artifact does not appear to de
- Unable to determine groupId and artifactId of the jar that c
- Unable to determine groupId and artifactId of the extension
- Unable to determine groupId and artifactId of the jar that c
- Unable to parse pom file: ${pom}
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/4aabf72fca28b2d2.
Report an issue: GitHub.