ラベル CPD の投稿を表示しています。 すべての投稿を表示
ラベル CPD の投稿を表示しています。 すべての投稿を表示

2014年3月15日土曜日

Copy Paste Detector(CPD)の解析結果をHTMLにする。

CPDで解析した結果はそのままでは見難いので、
antのタスクで解析からHTML出力まで行います。
HTMLにする際、XSLTテンプレートがPMDに含まれているので、
それを利用します。
ディレクトリ構成は以下の通りです。

/
  /pmd-bin-5.1.0/
  /commons-net-3.3-src/
  /apache-ant-1.8.4/
  build.xml
  cpdExec.bat

以下は、antのbuild.xmlファイルです。

<?xml version="1.0" encoding="UTF-8"?>
<project name="CPD" default="analysis" basedir=".">
  <path id="cpd.lib">
    <fileset dir="./pmd-bin-5.1.0/lib">
      <include name="*.jar"/>
    </fileset>
  </path>
  <taskdef name="cpd" classpathref="cpd.lib" classname="net.sourceforge.pmd.cpd.CPDTask"/>
  <target name="analysis">
    <antcall target="cpd" />
    <antcall target="xslt" />
  </target>
  <target name="cpd">
    <cpd encoding="UTF-8" minimumTokenCount="100" format="xml" language="java" outputFile="cpd.xml">
         <fileset dir="./commons-net-3.3-src/src/main/java">
             <include name="**/*.java"/>
         </fileset>
     </cpd>
  </target>
  <target name="xslt">
    <xslt in="cpd.xml" style="./pmd-bin-5.1.0/etc/xslt/cpdhtml.xslt" out="cpd.html" />
  </target>
</project>

batファイルは、以下のように記述します。

setlocal
set JAVA_HOME=%ProgramFiles%\Java\jdk1.7.0_51
set ANT_HOME=./apache-ant-1.8.4
"%ANT_HOME%\bin\ant.bat"
pause

HTMLは以下のような感じになります。

Copy Paste Detector(CPD)

Copy Paste Detector(CPD)でソースコードの重複(コピペ)を発見する。

様々なプログラミング言語を解析するPMDにあるCPDを利用します。
以下は、ディレクトリ構成です。
/
  /pmd-bin-5.1.0/
  /commons-net-3.3-src/
  cpdExec.bat

今回は、Apache CommonsのNetコンポーネントを解析に利用しました。
以下のようにbatファイルを記述します。
setlocal
set JAVA_HOME=%ProgramFiles%\Java\jdk1.7.0_51
set CLASSPATH=./pmd-bin-5.1.0/lib/ant-1.8.1.jar;./pmd-bin-5.1.0/lib/ant-launcher-1.8.1.jar;./pmd-bin-5.1.0/lib/ant-testutil-1.7.1.jar;./pmd-bin-5.1.0/lib/asm-5.0_BETA.jar;./pmd-bin-5.1.0/lib/commons-io-2.2.jar;./pmd-bin-5.1.0/lib/commons-lang3-3.1.jar;./pmd-bin-5.1.0/lib/dom4j-1.6.1.jar;./pmd-bin-5.1.0/lib/javacc-5.0.jar;./pmd-bin-5.1.0/lib/jaxen-1.1.1.jar;./pmd-bin-5.1.0/lib/jcommander-1.27.jar;./pmd-bin-5.1.0/lib/jdom-1.0.jar;./pmd-bin-5.1.0/lib/junit-4.4.jar;./pmd-bin-5.1.0/lib/pmd-5.1.0.jar;./pmd-bin-5.1.0/lib/rhino-1.7R3.jar;./pmd-bin-5.1.0/lib/saxon-9.1.0.8-dom.jar;./pmd-bin-5.1.0/lib/saxon-9.1.0.8.jar;./pmd-bin-5.1.0/lib/xercesImpl-2.9.1.jar;./pmd-bin-5.1.0/lib/xml-apis-1.3.02.jar;./pmd-bin-5.1.0/lib/xmlParserAPIs-2.6.2.jar;./pmd-bin-5.1.0/lib/xom-1.0.jar
"%JAVA_HOME%\bin\java.exe" -Xmx512m net.sourceforge.pmd.cpd.CPD --minimum-tokens 100 --files ./commons-net-3.3-src/src/main/java --encoding utf-8 --format xml
pause

実行する際、解析結果をファイルに保存する為、標準出力をリダイレクトします。
cpdExec.bat > cpd.xml