 ------
 Analyzing JSP Code
 ------
 Thomas Williamson
 ------
 2017-11-11
 ------

~~ 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

Analyzing JSP Code

  The PMD plugin analyzes Java by default. You can configure it to analyze Java Server Pages files instead as shown below.

  The example assumes that the JSP source code is stored in various subdirectories under the source directory
  <<<src/main/webapp>>> and enables all rules from the categories "Best Practices", "Codestyle",
  "Design", "Error Prone" and "Security".

 Note that you have to make sure that you configure <<<compileSourceRoots>>> and <<<includes>>>, so that
 PMD finds the JSP files.
 
 See {{{https://pmd.github.io/pmd-${pmdVersion}/pmd_rules_jsp.html}JSP Rule Index}} for a complete list
 of available rules.

+-----+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <language>jsp</language>
          <rulesets>
            <ruleset>/category/jsp/bestpractices.xml</ruleset>
            <ruleset>/category/jsp/codestyle.xml</ruleset>
            <ruleset>/category/jsp/design.xml</ruleset>
            <ruleset>/category/jsp/errorprone.xml</ruleset>
            <ruleset>/category/jsp/security.xml</ruleset>
          </rulesets>
          <includes>
            <include>**/*.jsp</include>
          </includes>
          <compileSourceRoots>
            <compileSourceRoot>${basedir}/src/main/webapp</compileSourceRoot>
          </compileSourceRoots>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----+

 <<Note:>> Configuring <<<compileSourceRoots>>> only works with Maven 3.3.9 and later. For older versions,
 you'll need to use <build-helper-maven-plugin> with the <<<add-source>>> goal in order to add
 the additional source directories, so that PMD finds the JSP files.
