diff --git a/pom.xml b/pom.xml
index 59c0165..550511c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@ under the License.
maven-toolchains-plugin
- 3.1.1-SNAPSHOT
+ 3.2.0-SNAPSHOT
maven-plugin
Apache Maven Toolchains Plugin
diff --git a/src/main/java/org/apache/maven/plugins/toolchain/ToolchainMojo.java b/src/main/java/org/apache/maven/plugins/toolchain/ToolchainMojo.java
index 7b8ec3e..d8454f6 100644
--- a/src/main/java/org/apache/maven/plugins/toolchain/ToolchainMojo.java
+++ b/src/main/java/org/apache/maven/plugins/toolchain/ToolchainMojo.java
@@ -35,8 +35,8 @@
import org.apache.maven.toolchain.ToolchainPrivate;
/**
- * Check that toolchains requirements are met by currently configured toolchains and
- * store the selected toolchains in build context for later retrieval by other plugins.
+ * Check that toolchains requirements are met by currently configured toolchains in {@code toolchains.xml} and
+ * store the selected toolchain in build context for later retrieval by other plugins.
*
* @author mkleint
*/
@@ -61,10 +61,10 @@ public class ToolchainMojo extends AbstractMojo {
/**
* Toolchains requirements, specified by one
- *
<toolchain-type>
- * <param>expected value</param>
- * ...
- * </toolchain-type>
+ * {@code
+ * expected value
+ * ...
+ * }
* element for each required toolchain.
*/
@Parameter(required = true)
diff --git a/src/main/java/org/apache/maven/plugins/toolchain/jdk/DisplayDiscoveredJdkToolchainsMojo.java b/src/main/java/org/apache/maven/plugins/toolchain/jdk/DisplayDiscoveredJdkToolchainsMojo.java
index bf3b46c..fc6a457 100644
--- a/src/main/java/org/apache/maven/plugins/toolchain/jdk/DisplayDiscoveredJdkToolchainsMojo.java
+++ b/src/main/java/org/apache/maven/plugins/toolchain/jdk/DisplayDiscoveredJdkToolchainsMojo.java
@@ -34,6 +34,8 @@
/**
* Discover the JDK toolchains and print them to the console.
+ *
+ * @since 3.2.0
*/
@Mojo(name = "display-discovered-jdk-toolchains", requiresProject = false)
public class DisplayDiscoveredJdkToolchainsMojo extends AbstractMojo {
diff --git a/src/main/java/org/apache/maven/plugins/toolchain/jdk/GenerateJdkToolchainsXmlMojo.java b/src/main/java/org/apache/maven/plugins/toolchain/jdk/GenerateJdkToolchainsXmlMojo.java
index 450eb95..e4f3e6e 100644
--- a/src/main/java/org/apache/maven/plugins/toolchain/jdk/GenerateJdkToolchainsXmlMojo.java
+++ b/src/main/java/org/apache/maven/plugins/toolchain/jdk/GenerateJdkToolchainsXmlMojo.java
@@ -36,6 +36,8 @@
/**
* Run the JDK toolchain discovery mechanism and generates a toolchains XML.
+ *
+ * @since 3.2.0
*/
@Mojo(name = "generate-jdk-toolchains-xml", requiresProject = false)
public class GenerateJdkToolchainsXmlMojo extends AbstractMojo {
diff --git a/src/main/java/org/apache/maven/plugins/toolchain/jdk/SelectJdkToolchainMojo.java b/src/main/java/org/apache/maven/plugins/toolchain/jdk/SelectJdkToolchainMojo.java
index 02efff9..c76f80f 100644
--- a/src/main/java/org/apache/maven/plugins/toolchain/jdk/SelectJdkToolchainMojo.java
+++ b/src/main/java/org/apache/maven/plugins/toolchain/jdk/SelectJdkToolchainMojo.java
@@ -50,6 +50,8 @@
/**
* Discover JDK toolchains and select a matching one.
+ *
+ * @since 3.2.0
*/
@Mojo(name = "select-jdk-toolchain", defaultPhase = LifecyclePhase.VALIDATE)
public class SelectJdkToolchainMojo extends AbstractMojo {
diff --git a/src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java b/src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java
index f138565..897e69e 100644
--- a/src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java
+++ b/src/main/java/org/apache/maven/plugins/toolchain/jdk/ToolchainDiscoverer.java
@@ -57,7 +57,10 @@
import static org.apache.maven.plugins.toolchain.jdk.SelectJdkToolchainMojo.TOOLCHAIN_TYPE_JDK;
/**
- * Toolchain discoverer service
+ * Toolchain discoverer service: tries {@code JAVA{xx}_HOME} environment variables, third party installers and
+ * OS-specific locations.
+ *
+ * @since 3.2.0
*/
@Named
@Singleton
@@ -78,7 +81,7 @@ public class ToolchainDiscoverer {
public static final List SORTED_PROVIDES = Collections.unmodifiableList(
Arrays.asList(VERSION, RUNTIME_NAME, RUNTIME_VERSION, VENDOR, VENDOR_VERSION, CURRENT, LTS, ENV));
- public static final String DISCOVERED_TOOLCHAINS_CACHE_XML = ".m2/discovered-toolchains-cache.xml";
+ public static final String DISCOVERED_TOOLCHAINS_CACHE_XML = ".m2/discovered-jdk-toolchains-cache.xml";
public static final String JDK_HOME = "jdkHome";
public static final String JAVA_HOME = "java.home";
@@ -394,18 +397,27 @@ private Set findJdks() {
return foundJdks;
}
+ /**
+ * Find JDKs in known classical locations.
+ *
+ * @return a set of path where JDKs were found.
+ */
private Set doFindJdks() {
List dirsToTest = new ArrayList<>();
+
// add current JDK
dirsToTest.add(Paths.get(System.getProperty(JAVA_HOME)));
+
// check environment variables for JAVA{xx}_HOME
System.getenv().entrySet().stream()
.filter(e -> e.getKey().startsWith("JAVA") && e.getKey().endsWith("_HOME"))
.map(e -> Paths.get(e.getValue()))
.forEach(dirsToTest::add);
+
final Path userHome = Paths.get(System.getProperty(USER_HOME));
List installedDirs = new ArrayList<>();
- // jdk installed by third
+
+ // JDK installed by third-party tool managers
installedDirs.add(userHome.resolve(".jdks"));
installedDirs.add(userHome.resolve(".m2").resolve("jdks"));
installedDirs.add(userHome.resolve(".sdkman").resolve("candidates").resolve("java"));
@@ -414,7 +426,8 @@ private Set doFindJdks() {
installedDirs.add(userHome.resolve(".jbang").resolve("cache").resolve("jdks"));
installedDirs.add(userHome.resolve(".asdf").resolve("installs"));
installedDirs.add(userHome.resolve(".jabba").resolve("jdk"));
- // os related directories
+
+ // OS related directories
String osname = System.getProperty("os.name").toLowerCase(Locale.ROOT);
boolean macos = osname.startsWith("mac");
boolean win = osname.startsWith("win");
@@ -437,6 +450,7 @@ private Set doFindJdks() {
installedDirs.add(Paths.get("/opt/java"));
installedDirs.add(Paths.get("/usr/lib/jvm"));
}
+
for (Path dest : installedDirs) {
if (Files.isDirectory(dest)) {
try (Stream stream = Files.list(dest)) {
@@ -451,6 +465,7 @@ private Set doFindJdks() {
}
}
}
+
// only keep directories that have a javac file
return dirsToTest.stream()
.filter(ToolchainDiscoverer::hasJavaC)
diff --git a/src/site/apt/index.apt.vm b/src/site/apt/index.apt.vm
index 6a65a88..e6ba754 100644
--- a/src/site/apt/index.apt.vm
+++ b/src/site/apt/index.apt.vm
@@ -31,20 +31,21 @@ ${project.name}
* Goals Overview
- Since version 3.2.0, a new toolchains mechanism is provided. This relies on an automatic discovery mechanism based
- on an internal heuristic which tries to detect JDK from known locations. Read about the {{{./toolchains/discovery.html}discovery mechanism}} for more
+ Since version 3.2.0, a new JDK-specific toolchains mechanism is provided. This relies on an automatic JDK discovery mechanism based
+ on an internal heuristic which tries to detect JDKs from known locations. Read about the {{{./toolchains/jdk-discovery.html}JDK discovery mechanism}} for more
information. This mechanism is to be used with the goal:
- * {{{./toolchain-mojo.html}toolchains:select-jdk-toolchain}} discover and selects a matching toolchain.
+ * {{{./select-jdk-toolchain-mojo.html}toolchains:select-jdk-toolchain}} discover and selects a matching JDK toolchain.
- Two helper goals are also provided:
+ Two associated helper goals are also provided:
- * {{{./toolchain-mojo.html}toolchains:display-discovered-jdk-toolchains}} displays discovered toolchains to the console.
- * {{{./toolchain-mojo.html}toolchains:generate-jdk-toolchains-xml}} can be used to write a <<>> containing discovered JDKs.
+ * {{{./display-discovered-jdk-toolchains-mojo.html}toolchains:display-discovered-jdk-toolchains}} displays discovered JDK toolchains to the console,
- The previous <<>> goal is still available:
+ * {{{./generate-jdk-toolchains-xml-mojo.html}toolchains:generate-jdk-toolchains-xml}} can be used to generate discovered JDKs in <<>> format and let user copy/paste.
- * {{{./toolchain-mojo.html}toolchains:toolchain}} selects a toolchain based on configured build requirements and stores it in build context for later retrieval by other plugins.
+ The previous <<>> goal is still available for JDK and {{{./toolchains/custom.html}other types}} of toolchains:
+
+ * {{{./toolchain-mojo.html}toolchains:toolchain}} selects a toolchain from <<>> based on configured build requirements and stores it in build context for later retrieval by other plugins.
* Usage
diff --git a/src/site/apt/toolchains/discovery.apt.vm b/src/site/apt/toolchains/jdk-discovery.apt.vm
similarity index 89%
rename from src/site/apt/toolchains/discovery.apt.vm
rename to src/site/apt/toolchains/jdk-discovery.apt.vm
index e528bc6..692dc9a 100644
--- a/src/site/apt/toolchains/discovery.apt.vm
+++ b/src/site/apt/toolchains/jdk-discovery.apt.vm
@@ -16,7 +16,7 @@
~~ under the License.
------
- Discovery mechanism
+ JDK Discovery mechanism
------
Guillaume Nodet
------
@@ -71,7 +71,7 @@ JDK Toolchain discovery mechanism
The <<>> goal finds a matching JDK.
The config below allows using the current JDK, or any other discovered JDK >= 17.
- The current JDK can be kept for speed, but JDK 17 or higher will be used if the current JDK is older than 17.
+ The current JDK can be kept for speed, but JDK 17 or higher will be used if the current JDK is older than 17:
+---+
@@ -99,6 +99,12 @@ JDK Toolchain discovery mechanism
JAVA17_HOME
++---+
+
+ You can also do everything only at CLI level, without modifying your <<>>
+
++---+
+mvn toolchains:select-jdk-toolchain -Dtoolchain.jdk.version="[17,)" compile
+---+
* Selection mechanism
@@ -135,13 +141,13 @@ JDK Toolchain discovery mechanism
The default value is <<>>.
-* Toolchains XML file
+* <<>> file
- The generation of the <<>> file is not necessary to use discovered toolchains.
- The <<>> will select a toolchain amongst explicitly configured toolchains and discovered
- toolchains. Discovered toolchains are cached in <<<~/.m2/discovered-toolchains-cache.xml>>> file
+ The generation of the <<>> file is not necessary to use discovered JDK toolchains.
+ The <<>> will select a toolchain amongst explicitly configured toolchains in <<>> and discovered
+ JDK toolchains. Discovered JDK toolchains are cached in <<<~/.m2/discovered-jdk-toolchains-cache.xml>>> file
by default, to speed up builds.
- If you prefer, you can use the <<>> to generate a toolchain XML. This can be used in
+ If you prefer, you can use the <<>> to generate a <<>>. This can be used in
conjunction with the <<>> configuration to disable discovery and only use explicitly
configured toolchains.
diff --git a/src/site/apt/toolchains/jdk.apt.vm b/src/site/apt/toolchains/jdk.apt.vm
index 9b5a824..04f2ac1 100644
--- a/src/site/apt/toolchains/jdk.apt.vm
+++ b/src/site/apt/toolchains/jdk.apt.vm
@@ -25,7 +25,7 @@
JDK Toolchain
-Note that this page refers to hand-written JDK toolchains. For a simpler setup, look at the {{{./discovery.html}discovery mechanism}}.
+ Note that this page refers to hand-written JDK toolchains in <<<~/.m2/toolchains.xml>>>. For a simpler setup, look at the {{{./jdk-discovery.html}JDK discovery mechanism}}.
* Toolchain Description
@@ -33,16 +33,16 @@ Note that this page refers to hand-written JDK toolchains. For a simpler setup,
Predefined <<<\>>> identification tokens, for requirement matching in plugin configuration, are:
- * "<<>>" marks the version of the JDK in <<>>. In plugin's selection, this can be either a single version or a version range.
+ * "<<>>" marks the version of the JDK in <<>>. In plugin's selection, this can be either a single version or a version range.
* Other tokens are accepted, but only exact matches are supported.
[]
- There is only one <<>> <<<\>>> element named "<<>>". It designates the root directory
+ In <<>>, there is only one <<<\>>> element named "<<>>". It designates the root directory
of a JDK installation.
-* Sample <<>> setup
+* Sample <<<~/.m2/toolchains.xml>>> setup
+---+
diff --git a/src/site/apt/usage.apt.vm b/src/site/apt/usage.apt.vm
index c7598b3..276ca2e 100644
--- a/src/site/apt/usage.apt.vm
+++ b/src/site/apt/usage.apt.vm
@@ -34,7 +34,7 @@ Usage
tools (including location and other information).
Maven Toolchains Plugin can read which toolchains are available on the user's
- computer (as configured in <<>>) and match them against the
+ computer (as configured in <<<~/.m2/toolchains.xml>>>) and match them against the
toolchain requirements of the project (as configured in <<>>). If a
match is found, the toolchain is made available to other, ,
Maven plugins in the build.
diff --git a/src/site/site.xml b/src/site/site.xml
index 2989a7b..a380eea 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -27,13 +27,13 @@ under the License.
-
-
-
+
+
-
-
+