blob: bd4f20f2baae5c016b50098504017f9cf1cd0465 [file] [log] [blame]
------
Target JDK and Toolchains
------
Dennis Lundberg
Andreas Dangel
------
2020-10-02
------
~~ 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.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
Target JDK
There is a configuration element in the PMD plugin that lets you set which
{{{../pmd-mojo.html#targetJdk}target JDK}} your Java code will be compiled for.
Often you want this to be in sync with the configuration for maven-compiler-plugin.
The best practice for this is to set up the wellknown property <<<maven.compiler.target>>>
and the rest will work automatically. Alternatively, you can set it manually:
+--------------------+
<project>
...
<reporting>
<plugins>
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
<version>${project.version}</version>
<configuration>
<targetJdk>1.6</targetJdk>
</configuration>
</plugin>
</plugins>
</reporting>
...
</project>
+--------------------+
Using Maven Toolchains
Since version 3.14.0 of the PMD plugin, toolchains are supported. This helps if the build system is
running a different JDK than being used for compiling. PMD reads the class files for
{{{../pmd-mojo.html#typeResolution}type resolution}} and this fails with ClassFormatErrors
if the JDK version is incorrect.
To set this up, refer to the {{{/guides/mini/guide-using-toolchains.html}Guide to Using Toolchains}}, which makes use
of the {{{/plugins/maven-toolchains-plugin/}Maven Toolchains Plugin}}.
With the maven-toolchains-plugin you configure 1 default JDK toolchain for all related maven-plugins.
Since maven-pmd-plugin 3.14.0 when using with Maven 3.3.1+ it is also possible to give the plugin its own
toolchain, which can be useful in case of different JDK calls per execution block (e.g. the test sources require a
different JDK compared to the main sources).