module Buildr::Pmd

Provides the pmd:xml and pmd:html tasks.

Require explicitly using require 'buildr/pmd'.

Public Class Methods

dependencies() click to toggle source

The specs for requirements

# File addon/buildr/pmd.rb, line 25
def dependencies
  %w(
    net.sourceforge.pmd:pmd-core:jar:6.11.0
    net.sourceforge.pmd:pmd-java:jar:6.11.0
    net.sourceforge.pmd:pmd-java8:jar:6.11.0
    jaxen:jaxen:jar:1.1.6
    commons-io:commons-io:jar:2.6
    com.beust:jcommander:jar:1.72
    org.ow2.asm:asm:jar:7.1
    com.google.code.gson:gson:jar:2.8.5
    net.java.dev.javacc:javacc:jar:5.0
    net.sourceforge.saxon:saxon:jar:9.1.0.8
    org.apache.commons:commons-lang3:jar:3.8.1
    org.antlr:antlr4-runtime:jar:4.7
  )
end
pmd(rule_set_files, format, output_file_prefix, source_paths, options = {}) click to toggle source
# File addon/buildr/pmd.rb, line 42
def pmd(rule_set_files, format, output_file_prefix, source_paths, options = {})
  dependencies = (options[:dependencies] || []) + self.dependencies
  cp = Buildr.artifacts(dependencies).each(&:invoke).map(&:to_s)
  (options[:rule_set_paths] || []).each {|p| cp << p}

  rule_sets = rule_set_files.dup

  Buildr.artifacts(options[:rule_set_artifacts] || []).each do |artifact|
    a = artifact.to_s
    dirname = File.dirname(a)
    rule_sets << a[dirname.length + 1, a.length]
    cp << File.dirname(a)
    artifact.invoke
  end

  puts 'PMD: Analyzing source code...'
  mkdir_p File.dirname(output_file_prefix)

  args = []
  args << '-no-cache'
  args << '-shortnames'
  args << '-rulesets' << rule_sets.join(',')
  args << '-format' << format
  args << '-reportfile' << "#{output_file_prefix}.#{format}"

  files = []
  source_paths.each do |src|
    files += Dir["#{src}/**/*.java"] if File.directory?(src)
  end
  files = files.sort.uniq

  Tempfile.open('pmd') do |tmp|
    tmp.write files.join(',')
    args << '-filelist' << tmp.path.to_s
  end

  begin
    Java::Commands.java 'net.sourceforge.pmd.PMD', *(args + [{:classpath => cp, :properties => options[:properties], :java_args => options[:java_args]}])
  rescue Exception => e
    raise e if options[:fail_on_error]
  end
end