blob: 4fbf230cf4d7232e733f026c8a16ad4b5b64c8d5 [file] [log] [blame]
------
Finding duplicated code in C#
------
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
Finding duplicated code in C#
By default, the maven-pmd-plugin only supports the languages Java, JavaScript and JSP.
But {{{https://pmd.github.io/latest/pmd_userdocs_cpd.html#supported-languages}CPD supports many more languages}},
e.g. C#. In order to enable C# in your build, you need to
configure several parts:
* Add an additional plugin dependency for c# (pmd-cs module)
* Select the language <<<cs>>>.
* Configure the includes filter to consider <<<*.cs>>> (otherwise only java files will be analyzed)
* Configure the source directory (by default, only <<<src/main/java>>> is analyzed)
+-----+
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>${project.version}</version>
<configuration>
<language>cs</language>
<minimumTokens>10</minimumTokens>
<includes>
<include>**/*.cs</include>
</includes>
<compileSourceRoots>
<compileSourceRoot>${basedir}/src/main/cs</compileSourceRoot>
</compileSourceRoots>
<printFailingErrors>true</printFailingErrors>
</configuration>
<executions>
<execution>
<goals>
<goal>cpd-check</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-cs</artifactId>
<version>${pmdVersion}</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
</build>
</project>
+-----+
In this example, the C# source files are located in <<<src/main/cs>>>.
<<Note:>> The version for <<<net.sourceforge.pmd:pmd-cs>>> needs to match the PMD version, that is
being used. If you {{{./upgrading-PMD-at-runtime.html}upgrade PMD at runtime}} you'll need to make
sure, to change the version here as well.