in src/main/java/org/apache/maven/plugins/toolchain/jdk/SelectJdkToolchainMojo.java [170:231]
private void doExecute() throws MisconfiguredToolchainException, MojoFailureException {
if (version == null && runtimeName == null && runtimeVersion == null && vendor == null && env == null) {
return;
}
Map<String, String> requirements = new HashMap<>();
Optional.ofNullable(version).ifPresent(v -> requirements.put(VERSION, v));
Optional.ofNullable(runtimeName).ifPresent(v -> requirements.put(RUNTIME_NAME, v));
Optional.ofNullable(runtimeVersion).ifPresent(v -> requirements.put(RUNTIME_VERSION, v));
Optional.ofNullable(vendor).ifPresent(v -> requirements.put(VENDOR, v));
Optional.ofNullable(env).ifPresent(v -> requirements.put(ENV, v));
ToolchainModel currentJdkToolchainModel =
discoverer.getCurrentJdkToolchain().orElse(null);
ToolchainPrivate currentJdkToolchain =
currentJdkToolchainModel != null ? factory.createToolchain(currentJdkToolchainModel) : null;
if (useJdk == JdkMode.IfMatch && currentJdkToolchain != null && matches(currentJdkToolchain, requirements)) {
getLog().info("Not using an external toolchain as the current JDK matches the requirements.");
return;
}
ToolchainPrivate toolchain = Stream.of(toolchainManager.getToolchainsForType(TOOLCHAIN_TYPE_JDK, session))
.filter(tc -> matches(tc, requirements))
.findFirst()
.orElse(null);
if (toolchain != null) {
getLog().info("Found matching JDK toolchain: " + toolchain);
}
if (toolchain == null && discoverToolchains) {
getLog().debug("No matching toolchains configured, trying to discover JDK toolchains");
PersistedToolchains persistedToolchains = discoverer.discoverToolchains(comparator);
getLog().debug("Discovered " + persistedToolchains.getToolchains().size() + " JDK toolchains");
for (ToolchainModel tcm : persistedToolchains.getToolchains()) {
ToolchainPrivate tc = factory.createToolchain(tcm);
if (tc != null && matches(tc, requirements)) {
toolchain = tc;
getLog().debug("Discovered matching JDK toolchain: " + toolchain);
break;
}
}
}
if (toolchain == null) {
throw new MojoFailureException(
"Cannot find matching toolchain definitions for the following toolchain types:" + requirements
+ System.lineSeparator()
+ "Define the required toolchains in your ~/.m2/toolchains.xml file.");
}
if (useJdk == JdkMode.IfSame
&& currentJdkToolchain != null
&& Objects.equals(getJdkHome(currentJdkToolchain), getJdkHome(toolchain))) {
getLog().debug("Not using an external toolchain as the current JDK has been selected.");
return;
}
toolchainManager.storeToolchainToBuildContext(toolchain, session);
getLog().debug("Found matching JDK toolchain: " + toolchain);
}