You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ev...@apache.org on 2005/05/06 01:49:07 UTC

svn commit: r168471 - /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF /maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus /maven/components/trunk/sandbox/maven-reports/maven-project-info-reports-plugin

Author: evenisse
Date: Thu May  5 16:49:06 2005
New Revision: 168471

URL: http://svn.apache.org/viewcvs?rev=168471&view=rev
Log:
Initial PMD plugin

Added:
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/.cvsignore
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/pom.xml
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportMojo.java
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus/
    maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus/components.xml
Modified:
    maven/components/trunk/sandbox/maven-reports/maven-project-info-reports-plugin/pom.xml

Added: maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/.cvsignore
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/.cvsignore?rev=168471&view=auto
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/.cvsignore (added)
+++ maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/.cvsignore Thu May  5 16:49:06 2005
@@ -0,0 +1,8 @@
+target
+*~
+*.log
+.classpath
+.project
+*.ipr
+*.iws
+*.iml

Added: maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/pom.xml?rev=168471&view=auto
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/pom.xml (added)
+++ maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/pom.xml Thu May  5 16:49:06 2005
@@ -0,0 +1,50 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>mojo</artifactId>
+    <groupId>org.apache.maven.plugins</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>maven-pmd-plugin</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>maven-plugin</packaging>
+  <name>Maven PMD Plugin</name>
+  <inceptionYear>2005</inceptionYear>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-project</artifactId>
+      <version>2.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>doxia</groupId>
+      <artifactId>doxia-core</artifactId>
+      <version>1.0-alpha-2-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.reporting</groupId>
+      <artifactId>maven-reporting-api</artifactId>
+      <version>2.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>pmd</groupId>
+      <artifactId>pmd</artifactId>
+      <version>2.3</version>
+    </dependency>
+    <dependency>
+      <groupId>jaxen</groupId>
+      <artifactId>jaxen</artifactId>
+      <version>1.0-FCS</version>
+    </dependency>
+    <dependency>
+      <groupId>saxpath</groupId>
+      <artifactId>saxpath</artifactId>
+      <version>1.0-FCS</version>
+    </dependency>
+    <dependency>
+      <groupId>plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>1.0-alpha-2</version>
+    </dependency>
+  </dependencies>
+</project>

Added: maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java?rev=168471&view=auto
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java (added)
+++ maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java Thu May  5 16:49:06 2005
@@ -0,0 +1,176 @@
+package org.apache.maven.plugin.pmd;
+
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import net.sourceforge.pmd.PMD;
+import net.sourceforge.pmd.PMDException;
+import net.sourceforge.pmd.Report;
+import net.sourceforge.pmd.RuleContext;
+import net.sourceforge.pmd.RuleSet;
+import net.sourceforge.pmd.RuleSetFactory;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.doxia.sink.Sink;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Implement the PMD report.
+ *
+ * @author Brett Porter
+ * @version $Id: PmdReport.java,v 1.3 2005/02/23 00:08:53 brett Exp $
+ */
+public class PmdReport
+    extends AbstractMavenReport
+{
+    protected static final String[] DEFAULT_EXCLUDES = {
+        // Miscellaneous typical temporary files
+        "**/*~",
+        "**/#*#",
+        "**/.#*",
+        "**/%*%",
+        "**/._*",
+
+        // CVS
+        "**/CVS",
+        "**/CVS/**",
+        "**/.cvsignore",
+
+        // SCCS
+        "**/SCCS",
+        "**/SCCS/**",
+
+        // Visual SourceSafe
+        "**/vssver.scc",
+
+        // Subversion
+        "**/.svn",
+        "**/.svn/**",
+
+        // Mac
+        "**/.DS_Store"
+    };
+
+    public void execute()
+        throws MavenReportException
+    {
+        Sink sink = null;
+        try
+        {
+            sink = getSink();
+        }
+        catch( IOException e )
+        {
+            throw new MavenReportException( "Can't obtain sink for PMD report.", e );
+        }
+
+        PMD pmd = new PMD();
+        RuleContext ruleContext = new RuleContext();
+        Report report = new Report();
+        PmdReportListener reportSink = new PmdReportListener( sink );
+        report.addListener( reportSink );
+        ruleContext.setReport( report );
+
+        RuleSetFactory ruleSetFactory = new RuleSetFactory();
+        RuleSet ruleSet = ruleSetFactory.createRuleSet(
+            pmd.getClass().getResourceAsStream( "/rulesets/controversial.xml" ) );
+
+        reportSink.beginDocument();
+
+        List files;
+        try
+        {
+            files = getFiles( "**/*.java", null );
+        }
+        catch( IOException e )
+        {
+            throw new MavenReportException( "Can't parse " + getConfiguration().getSourceDirectory(), e );
+        }
+
+        for ( Iterator i = files.iterator(); i.hasNext(); )
+        {
+            File file = (File) i.next();
+            FileReader fileReader;
+            try
+            {
+                fileReader = new FileReader( file );
+            }
+            catch ( FileNotFoundException e )
+            {
+                throw new MavenReportException( "Error opening source file: " + file, e );
+            }
+
+            try
+            {
+                // TODO: lazily call beginFile in case there are no rules
+
+                reportSink.beginFile( file );
+                pmd.processFile( fileReader, ruleSet, ruleContext );
+                reportSink.endFile( file );
+            }
+            catch ( PMDException e )
+            {
+                throw new MavenReportException( "Failure executing PMD for: " + file, e );
+            }
+            finally
+            {
+                try
+                {
+                    fileReader.close();
+                }
+                catch ( IOException e )
+                {
+                    throw new MavenReportException( "Error closing source file: " + file, e );
+                }
+            }
+        }
+        reportSink.endDocument();
+    }
+
+    public String getOutputName()
+    {
+        return "pmd";
+    }
+
+    private List getFiles( String includes, String excludes )
+        throws IOException
+    {
+        StringBuffer excludesStr = new StringBuffer();
+        if ( StringUtils.isNotEmpty( excludes ) )
+        {
+            excludesStr.append(excludes);
+        }
+        for ( int i = 0; i < DEFAULT_EXCLUDES.length; i++ )
+        {
+            if ( excludesStr.length() > 0 )
+            {
+                excludesStr.append( "," );
+            }
+            excludesStr.append( DEFAULT_EXCLUDES[i] );
+        }
+
+        return FileUtils.getFiles( new File( getConfiguration().getSourceDirectory() ), "**/*", excludesStr.toString() );
+    }
+}

Added: maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java?rev=168471&view=auto
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java (added)
+++ maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportListener.java Thu May  5 16:49:06 2005
@@ -0,0 +1,123 @@
+package org.apache.maven.plugin.pmd;
+
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ * 
+ * Licensed 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.
+ */
+
+import net.sourceforge.pmd.ReportListener;
+import net.sourceforge.pmd.RuleViolation;
+import net.sourceforge.pmd.stat.Metric;
+import org.codehaus.doxia.sink.Sink;
+
+import java.io.File;
+
+/**
+ * Handle events from PMD, converting them into Doxia events.
+ *
+ * @author Brett Porter
+ * @version $Id: PmdReportListener.java,v 1.1.1.1 2005/02/17 07:16:22 brett Exp $
+ */
+public class PmdReportListener
+    implements ReportListener
+{
+    private Sink sink;
+    private static final String TITLE = "PMD Results";
+
+    public PmdReportListener( Sink sink )
+    {
+        this.sink = sink;
+    }
+
+    public void ruleViolationAdded( RuleViolation ruleViolation )
+    {
+        sink.tableRow();
+        sink.tableCell();
+        sink.text( ruleViolation.getDescription() );
+        sink.tableCell_();
+        sink.tableCell();
+        // TODO: xref link the line number
+        sink.text( String.valueOf( ruleViolation.getLine() ) );
+        sink.tableCell_();
+        sink.tableRow_();
+    }
+
+    public void metricAdded( Metric metric )
+    {
+        // TODO: metrics
+    }
+
+    public void beginDocument()
+    {
+        sink.head();
+        sink.title();
+        sink.text( TITLE );
+        sink.title_();
+        sink.head_();
+
+        sink.body();
+
+        sink.section1();
+        sink.sectionTitle();
+        sink.text( TITLE );
+        sink.sectionTitle_();
+
+        sink.paragraph();
+        sink.text( "The following document contains the results of " );
+        sink.link( "http://pmd.sourceforge.net/" );
+        sink.text( "PMD" );
+        sink.link_();
+        sink.paragraph_();
+
+        // TODO overall summary
+
+        sink.section1_();
+        sink.sectionTitle();
+        sink.text( "Files" );
+        sink.sectionTitle_();
+
+        // TODO files summary
+    }
+
+    public void beginFile( File file )
+    {
+        sink.section2();
+        sink.sectionTitle();
+        sink.text( file.getPath() );
+        sink.sectionTitle_();
+
+        sink.table();
+        sink.tableRow();
+        sink.tableHeaderCell();
+        sink.text( "Violation" );
+        sink.tableHeaderCell_();
+        sink.tableHeaderCell();
+        sink.text( "Line" );
+        sink.tableHeaderCell_();
+        sink.tableRow_();
+    }
+
+    public void endFile( File file )
+    {
+        sink.table_();
+        sink.section2_();
+    }
+
+    public void endDocument()
+    {
+        sink.section1_();
+
+        sink.body_();
+    }
+}

Added: maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportMojo.java?rev=168471&view=auto
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportMojo.java (added)
+++ maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReportMojo.java Thu May  5 16:49:06 2005
@@ -0,0 +1,76 @@
+package org.apache.maven.plugin.pmd;
+
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.MavenReport;
+import org.apache.maven.reporting.MavenReportConfiguration;
+import org.apache.maven.reporting.MavenReportException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @goal pmd
+ * @description A Maven2 plugin which generates a PMD report
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id: PmdReportMojo.java,v 1.4 2005/02/23 00:08:54 brett Exp $
+ */
+public class PmdReportMojo
+    extends AbstractMojo
+{
+    /**
+     * @parameter alias="workingDirectory" expression="${project.build.directory}/site-generated"
+     * @required
+     */
+    private String outputDirectory;
+
+    /**
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        MavenReportConfiguration config = new MavenReportConfiguration();
+
+        config.setModel( project.getModel() );
+
+        config.setOutputDirectory( new File( outputDirectory ) );
+
+        MavenReport report = new PmdReport();
+
+        report.setConfiguration( config );
+
+        try
+        {
+            report.generate();
+        }
+        catch ( MavenReportException e )
+        {
+            throw new MojoExecutionException( "An error is occurred in the PMD report generation.", e );
+        }
+    }
+}

Added: maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus/components.xml?rev=168471&view=auto
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/components/trunk/sandbox/maven-reports/maven-pmd-plugin/src/main/resources/META-INF/plexus/components.xml Thu May  5 16:49:06 2005
@@ -0,0 +1,15 @@
+<component-set>
+  <!-- TODO:
+   - this should be generated using cdc
+   - need to configure the reports
+   - the hint should perhaps use a qualifier -> this is equivalent to how we must deal with plugins outside of the maven group ID
+  -->
+  <components>
+    <component>
+      <role>org.apache.maven.reporting.MavenReport</role>
+      <role-hint>pmd</role-hint>
+      <implementation>org.apache.maven.plugin.pmd.PmdReport</implementation>
+      <instantiation-strategy>per-lookup</instantiation-strategy>
+    </component>
+  </components>
+</component-set>

Modified: maven/components/trunk/sandbox/maven-reports/maven-project-info-reports-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-reports/maven-project-info-reports-plugin/pom.xml?rev=168471&r1=168470&r2=168471&view=diff
==============================================================================
--- maven/components/trunk/sandbox/maven-reports/maven-project-info-reports-plugin/pom.xml (original)
+++ maven/components/trunk/sandbox/maven-reports/maven-project-info-reports-plugin/pom.xml Thu May  5 16:49:06 2005
@@ -5,7 +5,6 @@
     <groupId>org.apache.maven.plugins</groupId>
     <version>1.0-SNAPSHOT</version>
   </parent>
-  <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-project-info-reports-plugin</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>maven-plugin</packaging>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org