[
https://issues.apache.org/jira/browse/MTOOLCHAINS-49?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17822615#comment-17822615
]
ASF GitHub Bot commented on MTOOLCHAINS-49:
-------------------------------------------
gnodet commented on code in PR #14:
URL:
https://github.com/apache/maven-toolchains-plugin/pull/14#discussion_r1509154012
##########
src/site/apt/toolchains/discovery.apt.vm:
##########
@@ -0,0 +1,148 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ ------
+ Discovery mechanism
+ ------
+ Guillaume Nodet
+ ------
+ 2024-02-28
+ ------
+
+JDK Toolchain discovery mechanism
+
+ Since version 3.2.0, the plugin provides a heuristic to discover installed
JDK toolchains, by looking
+ at known installation directories and at environment variables.
+
+ The list of discovered toolchains can be easily displayed using the command
+ <<<mvn
org.apache.maven.plugins:maven-toolchains-plugin:${project.version}:display-discovered-jdk-toolchains>>>.
+ This will print something like:
+
++---+
+[INFO] Discovered 10 JDK toolchains:
+[INFO] - /Users/gnodet/.sdkman/candidates/java/21.0.2-graalce
+[INFO] provides:
+[INFO] version: 21.0.2
+[INFO] runtime.name: OpenJDK Runtime Environment
+[INFO] runtime.version: 21.0.2+13-jvmci-23.1-b30
+[INFO] vendor: GraalVM Community
+[INFO] vendor.version: GraalVM CE 21.0.2+13.1
+[INFO] current: true
+[INFO] lts: true
+[INFO] env: JAVA_HOME,JAVA21_HOME
+...
++---+
+
+ If you have installed JDK using standard tools and they are not listed here,
feel free
+ to {{{../issue-management.html}raise an issue}}.
+
+ The discovery mechanism provides a few information for each discovered JDK:
+
+ * <<<version>>>: the JDK version
+
+ * <<<runtime.name>>>: the name of the JDK runtime
+
+ * <<<runtime.version>>>: the version of the JDK runtime
+
+ * <<<vendor>>>: the vendor name
+
+ * <<<vendor.version>>>: the vendor version
+
+ * <<<current>>>: set to <<<true>>> if this is the running JDK
+
+ * <<<lts>>>: set to <<<true>>> if JDK version is a long-term supported
version
+
+ * <<<env>>>: set to the comma separated list of <<<JAVA\{xyz\}_HOME>>>>
matching environment variables
+
+
+ The <<<select-jdk-toolchain>>> goal discovering and selecting a matching JDK.
+ The config below allows using the current JDK, or any other discovered JDK
>= 17.
+ The benefit is that the current JDK can be kept for speed, but ensuring the
usage of any JDK 17 or higher if
+ the current jdk is below the requirements.
+
++---+
+<properties>
+ <toolchain.jdk.version>[17,)</toolchain.jdk.version>
+<properties>
+
+<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-toolchains-plugin</artifactId>
+ <version>${project.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>select-jdk-toolchain</goal>
+ </goals>
+ </execution>
+ </executions>
+</plugin>
++---+
+
+ If you use environment variables to configure your JDKs, you can use the
following configuration to select
+ the toolchain which is configured using the <<<JAVA17_HOME>>> environment
variable.
+
++---+
+<properties>
+ <toolchain.jdk.version>JAVA17_HOME</toolchain.jdk.version>
+<properties>
++---+
+
+* Selection mechanism
+
+ Several properties can be used to express requirements to match against
discovered JDK toolchains:
+
+ * <<<version>>> / <<<toolchain.jdk.version>>>: a version range such as
<<<[17,18)>>> to match against the JDK version
+
+ * <<<runtimeName>>> / <<<toolchain.jdk.runtime.name>>>
+
+ * <<<runtimeVersion>>> / <<<toolchain.jdk.runtime.version>>>
+
+ * <<<vendor>>> / <<<toolchain.jdk.vendor>>>
+
+ * <<<env>>> / <<<toolchain.jdk.env>>>: the name of an environment variable
that the JDK toolchain must match
+
+ The <<<useJdk>>> can be used to define whether the current JDK can be used
if it matches the requirements.
+
+* Sorting
+
+ Multiple discovered JDK toolchains may match the above requirements. In
such a case, you may want to express
+ preferences to use to sort the toolchains. This can be done using the
<<<comparator>>> configuration which is a
+ comma separated list of criterions amongst the following:
+
+ * <<<lts>>>: prefer LTS toolchains
+
+ * <<<current>>>: prefer the current JDK
+
+ * <<<env>>>: prefer toolchains discovered from environment variables
+
+ * <<<version>>>: prefer higher JDK versions
+
+ * <<<vendor>>>: sort alphabetically by vendor name
+
+ The default value is <<<lts,current,env,version,vendor>>>.
+
+* Toolchains XML file
+
+ The generation of the <<<toolchains.xml>>> file is not necessary to use
discovered toolchains.
+ The <<<select-jdk-toolchain>>> will select a toolchain amongst explicitly
configured toolchains and discovered
+ toolchains. The information for discovered toolchains are cached in
<<<~/.m2/discovered-toolchains-cache.xml>>> file
Review Comment:
That's not completely right, as the discovery is two steps: find JDKs,
gather info for each JDK. Only the second step is cached. For in order to
simplify the doc, I'll go with your proposal.
> Automatic discovery of JDK toolchains
> -------------------------------------
>
> Key: MTOOLCHAINS-49
> URL: https://issues.apache.org/jira/browse/MTOOLCHAINS-49
> Project: Maven Toolchains Plugin
> Issue Type: Improvement
> Reporter: Guillaume Nodet
> Assignee: Guillaume Nodet
> Priority: Major
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)