[ https://jira.codehaus.org/browse/MPMD-174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=358345#comment-358345 ]
Maciek Siemczyk edited comment on MPMD-174 at 12/1/14 9:53 AM: --------------------------------------------------------------- I don't know if it is a bug in the PMD's code or that's by design as I don't know anything about it. However, the root cause of this bug is the way that RuleSetReferenceId class processes the filename and when that happens to be a HTTP(S) URL it strips is it incorrectly. Please note that you could make similar patch in PMD: if the given ID is HTTP(S) just use the whole thing as ID and don't do any stripping. Marek's explanation is dead on: "Essentially what happens is following: maven-pmd-plugin calls PMD -> it creates new instance of RuleSetReferenceId. In the constructor, several assumptions are made, so eventually it strips everything after the last "/" from the URL (in case of SonarQube http://sonar-instance/profiles). This URL gets passed back to maven-pmd-plugin for download. It downloads a HTML page and stores it in a temporary file. This file gets passed to PMD as a ruleset and you get an exception, because the downloaded HTML page is not a PMD ruleset." was (Author: msiemczyk): I don't know if it is a bug in the PMD's code or that's by design as I don't know anything about it. However, the root cause of this bug is the way that RuleSetReferenceId class processes the filename and when that happens to be a HTTP(S) URL it strips is it incorrectly. Please note that you could make similar patch could be made in PMD: if the given ID is HTTP(S) just use the whole thing as ID and don't do any stripping. Marek's explanation is dead on: "Essentially what happens is following: maven-pmd-plugin calls PMD -> it creates new instance of RuleSetReferenceId. In the constructor, several assumptions are made, so eventually it strips everything after the last "/" from the URL (in case of SonarQube http://sonar-instance/profiles). This URL gets passed back to maven-pmd-plugin for download. It downloads a HTML page and stores it in a temporary file. This file gets passed to PMD as a ruleset and you get an exception, because the downloaded HTML page is not a PMD ruleset." > Using a permalink from sonar as a ruleset does not work > ------------------------------------------------------- > > Key: MPMD-174 > URL: https://jira.codehaus.org/browse/MPMD-174 > Project: Maven PMD Plugin > Issue Type: Bug > Reporter: Cremers stijn > Attachments: MPMD-174.patch, MPMD-174.patch, Sonar's main page.jpg > > > I am trying to use a permalink from sonar with the pmd configuration from > sonar as a rulest in the maven-pmd-plugin. > This is my maven configuration: > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-pmd-plugin</artifactId> > <version>3.0.1</version> > <configuration> > <rulesets> > > <ruleset>http://my-tools.mycompany.com/sonar/profiles/export?format=pmd&language=java&name=MyProfile</ruleset> > </rulesets> > </configuration> > <executions> > <execution> > <id>pmd</id> > <goals><goal>check</goal></goals> > </execution> > </executions> > </plugin> > But i get the following error when i run "mvn clean install": > [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-pmd-plugin:3.0.1:pmd (pmd) on project my-pmd: > An error has occurred in PMD Report report generation. Could not find > resource 'rulesets/http://my/tools.mycompany.com/sonar/profiles.xml'. -> > [Help 1] > I have tried to use the link from the sonar demo site: > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-pmd-plugin</artifactId> > <version>3.0.1</version> > <configuration> > <rulesets> > > <ruleset>http://nemo.sonarqube.org/profiles/export?format=pmd&language=java&name=Nemo</ruleset> > </rulesets> > </configuration> > <executions> > <execution> > <id>pmd</id> > <goals><goal>check</goal></goals> > </execution> > </executions> > </plugin> > But then i get the following error: > [INFO] --- maven-pmd-plugin:3.0.1:pmd (pmd) @ my-pmd --- > [WARNING] Unable to locate Source XRef to link to - DISABLED > [WARNING] Failure executing PMD: Couldn't find the class White spaces are > required between publicId and systemId. > java.lang.RuntimeException: Couldn't find the class White spaces are required > between publicId and systemId. > at > net.sourceforge.pmd.RuleSetFactory.classNotFoundProblem(RuleSetFactory.java:244) > at > net.sourceforge.pmd.RuleSetFactory.parseRuleSetNode(RuleSetFactory.java:238) > at > net.sourceforge.pmd.RuleSetFactory.createRuleSet(RuleSetFactory.java:161) > at > net.sourceforge.pmd.RuleSetFactory.createRuleSets(RuleSetFactory.java:126) > at > net.sourceforge.pmd.RuleSetFactory.createRuleSets(RuleSetFactory.java:111) > at > net.sourceforge.pmd.processor.AbstractPMDProcessor.createRuleSets(AbstractPMDProcessor.java:56) > at > net.sourceforge.pmd.processor.MonoThreadProcessor.processFiles(MonoThreadProcessor.java:41) > at net.sourceforge.pmd.PMD.processFiles(PMD.java:271) > at > org.apache.maven.plugin.pmd.PmdReport.generateReport(PmdReport.java:296) > at org.apache.maven.plugin.pmd.PmdReport.execute(PmdReport.java:194) > at > org.apache.maven.plugin.pmd.PmdReport.executeReport(PmdReport.java:168) > at > org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:190) > at > org.apache.maven.reporting.AbstractMavenReport.execute(AbstractMavenReport.java:99) > at > org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) > at > org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions(MojoExecutor.java:364) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:198) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) > at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) > at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) > at > org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) > at > org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) > at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:318) > at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153) > at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) > at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) > at org.apache.maven.cli.MavenCli.main(MavenCli.java:158) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) > at > org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) > at > org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:414) > at > org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:357) -- This message was sent by Atlassian JIRA (v6.1.6#6162)