Skip to content

Commit

Permalink
[MPMD-296] - Copy ruleset files into a subdirectory of target
Browse files Browse the repository at this point in the history
* Add new property "rulesetsTargetDirectory"
* Update existing tests for the new default behavior
* Add integration test, to verify backwards comaptible configuration
  • Loading branch information
adangel committed Jan 19, 2020
1 parent b46470f commit 5e42898
Show file tree
Hide file tree
Showing 29 changed files with 271 additions and 18 deletions.
24 changes: 24 additions & 0 deletions src/it/MPMD-296-rulesetsTargetDirectory/invoker.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 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.

invoker.goals.1 = clean verify
invoker.profiles.1 =
# no clean for the next executions, otherwise we can't verify
invoker.goals.2 = verify
invoker.profiles.2 = customTargetOld
invoker.goals.3 = verify
invoker.profiles.3 = customTarget
82 changes: 82 additions & 0 deletions src/it/MPMD-296-rulesetsTargetDirectory/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>

<!--
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.
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.plugins.pmd.it</groupId>
<artifactId>MPMD-296-rulesetsTargetDirectory</artifactId>
<version>1.0.0-SNAPSHOT</version>

<description>Verifies that the resolved and extracted rulesets are in the correct target directory</description>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>@project.version@</version>
<configuration>
<failOnViolation>false</failOnViolation>
</configuration>
<executions>
<execution>
<id>pmd-check</id>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<profiles>
<profile>
<id>customTargetOld</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<rulesetsTargetDirectory>${project.build.directory}</rulesetsTargetDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>customTarget</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<rulesetsTargetDirectory>${project.build.directory}/pmd-custom</rulesetsTargetDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package test;

/*
* 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.
*/

public class MyClass
{

public static void main( String[] args )
{
;
return;
}

}
34 changes: 34 additions & 0 deletions src/it/MPMD-296-rulesetsTargetDirectory/verify.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@

/*
* 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.
*/

File buildLog = new File( basedir, 'build.log' )
assert buildLog.exists()

// default configuration
File defaultRuleset = new File( basedir, 'target/pmd/rulesets/maven-pmd-plugin-default.xml' )
assert defaultRuleset.exists()

// backwards compatible configuration (profile customTargetOld)
File customTargetOld = new File( basedir, 'target/maven-pmd-plugin-default.xml' )
assert customTargetOld.exists()

// custom configuration (profile customTarget)
File customTarget = new File( basedir, 'target/pmd-custom/maven-pmd-plugin-default.xml' )
assert customTarget.exists()
4 changes: 2 additions & 2 deletions src/it/multi-module/verify.bsh
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,14 @@ for ( String path : paths )


// check PMD rulesets target copy
File rule = new File( basedir, "mod-1/target/latin-1.xml" );
File rule = new File( basedir, "mod-1/target/pmd/rulesets/latin-1.xml" );
String nonascii = "-CHARS: \u00C4\u00D6\u00DC\u00E4\u00F6\u00FC\u00DF\u00BC\u00BD\u00BE\u00A4";
String content = FileUtils.fileRead( rule, "ISO-8859-1" );
if ( content.indexOf( nonascii ) < 0 )
{
throw new IOException( "non-ascii content corrupted in Latin1." );
}
rule = new File( basedir, "mod-1/target/utf-8.xml" );
rule = new File( basedir, "mod-1/target/pmd/rulesets/utf-8.xml" );
content = FileUtils.fileRead( rule, "UTF-8" );
if ( content.indexOf( nonascii ) < 0 )
{
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/org/apache/maven/plugins/pmd/PmdReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,15 @@ public class PmdReport
@Parameter( property = "pmd.renderViolationsByPriority", defaultValue = "true" )
private boolean renderViolationsByPriority = true;

/**
* Before PMD is executed, the configured rulesets are resolved and copied into this directory.
* <p>Note: Before 3.13.0, this was by default ${project.build.directory}.
*
* @since 3.13.0
*/
@Parameter( property = "pmd.rulesetsTargetDirectory", defaultValue = "${project.build.directory}/pmd/rulesets" )
private File rulesetsTargetDirectory;

@Component
private DependencyResolver dependencyResolver;

Expand Down Expand Up @@ -396,7 +405,7 @@ private void executePmd()
// configure ResourceManager
locator.addSearchPath( FileResourceLoader.ID, project.getFile().getParentFile().getAbsolutePath() );
locator.addSearchPath( "url", "" );
locator.setOutputDirectory( targetDirectory );
locator.setOutputDirectory( rulesetsTargetDirectory );

renderer = new PmdCollectingRenderer();
PMDConfiguration pmdConfiguration = getPMDConfiguration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public void testNotFailOnViolation()

testPom =
new File( getBasedir(),
"src/test/resources/unit/default-configuration/pmd-check-notfailonviolation-plugin-config.xml" );
"src/test/resources/unit/default-configuration/cpd-check-notfailonviolation-plugin-config.xml" );
final CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
cpdViolationMojo.execute();

Expand Down
29 changes: 15 additions & 14 deletions src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public void testDefaultConfiguration()
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

// check if the rulesets, that have been applied, have been copied
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/maven-pmd-plugin-default.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/maven-pmd-plugin-default.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
Expand Down Expand Up @@ -187,13 +187,13 @@ public void testJavascriptConfiguration()
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

// these are the rulesets, that have been applied...
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/bestpractices.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/bestpractices.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/codestyle.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/codestyle.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/errorprone.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/errorprone.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
Expand Down Expand Up @@ -250,18 +250,19 @@ public void testFileURL()
File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/basic.xml" );
// the resolved and extracted rulesets
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/basic.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/imports.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/imports.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/unusedcode.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/unusedcode.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile =
new File( getBasedir(),
"target/test/unit/default-configuration/target/export_format_pmd_language_java_name_Sonar_2520way.xml" );
"target/test/unit/default-configuration/target/pmd/rulesets/export_format_pmd_language_java_name_Sonar_2520way.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
Expand Down Expand Up @@ -306,7 +307,7 @@ public void testCustomConfiguration()
File generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/pmd.csv" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/custom.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/pmd/rulesets/custom.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/site/pmd.html" );
Expand Down Expand Up @@ -528,19 +529,19 @@ public void testJspConfiguration()
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

// these are the rulesets, that have been applied...
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/bestpractices.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/bestpractices.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/codestyle.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/codestyle.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/design.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/design.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/errorprone.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/errorprone.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/security.xml" );
generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/security.xml" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );

generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ under the License.
<project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
<outputDirectory>${basedir}/target/test/unit/custom-configuration/target/site</outputDirectory>
<targetDirectory>${basedir}/target/test/unit/custom-configuration/target</targetDirectory>
<rulesetsTargetDirectory>${basedir}/target/test/unit/custom-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
<format>csv</format>
<linkXRef>true</linkXRef>
<xrefLocation>${basedir}/target/test/unit/custom-configuration/target/site/xref</xrefLocation>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ under the License.
<configuration>
<sourceDirectory>${basedir}/src/test/resources/unit/custom-configuration</sourceDirectory>
<targetDirectory>${basedir}/target/test/unit/custom-configuration/target</targetDirectory>
<rulesetsTargetDirectory>${basedir}/target/test/unit/custom-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
<failOnViolation>false</failOnViolation>
<language>java</language>
</configuration>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ under the License.
<project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
<outputDirectory>${basedir}/target/test/unit/skip-configuration/target/site</outputDirectory>
<targetDirectory>${basedir}/target/test/unit/skip-configuration/target</targetDirectory>
<rulesetsTargetDirectory>${basedir}/target/test/unit/skip-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
<format>csv</format>
<linkXRef>true</linkXRef>
<xrefLocation>${basedir}/target/test/unit/skip-configuration/target/site/xref</xrefLocation>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<!--
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.
-->

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>custom.configuration</groupId>
<artifactId>custom-configuration</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2006</inceptionYear>
<name>Maven PMD CPD Violation Check Custom Configuration Test</name>
<url>http://maven.apache.org</url>
<build>
<finalName>custom-configuration</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
<targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
<failOnViolation>false</failOnViolation>
<verbose>false</verbose>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ under the License.
<project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
<outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
<targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
<rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
<format>xml</format>
<linkXRef>true</linkXRef>
<xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
Expand Down
Loading

0 comments on commit 5e42898

Please sign in to comment.