LoginSignup
19

More than 5 years have passed since last update.

PMDを使ってObjectiveCの重複コードを検出する

Posted at

はじめに

僕にそのコピペを直せというのか というエントリでPMD-CPDの紹介がされています。

このPMD対応言語が以下のように広いのですが、

  • Java
  • JSP
  • C++
  • Ruby
  • Fortran
  • PHP
  • C#
  • PLSQL
  • Ecmascript

ObjectiveCがない!

ただ、JenkinsでObjective-Cのコード重複を採れるようにする にあるように別途Jarを含ませることで可能になります。

ただし! このJarは PMD 4系じゃないと動かないようで、最近の5.1系などではどうも動きません。
だがしかし! https://github.com/AndreasGorges/Objective-C-CPD-Language でどうやら 5.1系に対応しているようだ!
ところが! このリポジトリにはビルド済みのJarファイルが無い!しかもBuild方法が書かれていない!

というわけで、Javaには疎い私ですが、四苦八苦しながらビルドできたので、ビルドする方法とその使い方を説明します。

環境/必要なもの/試したVersion

  • MacOS 10.9.5
  • brew
  • javac 1.7.0_51
  • pmd 5.1.3

Setup

PMDをInstallする

% brew install pmd

Objective-C-CPD-LanguageをBuildする

Mavenが必要っぽいのでInstall

% brew install maven

GithubからprojectをClone

git clone https://github.com/AndreasGorges/Objective-C-CPD-Language
cd Objective-C-CPD-Language

JarファイルをBuild&Install

※ zshです
※ pmd 5.1.3 のVersion部分は適宜読み替えて下さい

build.zsh
mvn javacc:javacc
mkdir build
cp -r src/main/java/net build 
cp -r target/generated-sources/javacc/com build  
cd build
javac -cp .:/usr/local/Cellar/pmd/5.1.3/libexec/lib/pmd-5.1.3.jar -Xlint:unchecked **/*.java  # 警告がいっぱい出るが無視
jar cf ObjCLanguage-0.0.8-SNAPSHOT.jar **/*.class 
cp ObjCLanguage-0.0.8-SNAPSHOT.jar /usr/local/Cellar/pmd/5.1.3/libexec/lib/

PMD の ObjectiveC版を使ってみる

こんな感じで使えます。

pmd cpd --language ObjectiveC --minimum-tokens 100 --files /path/to/source_code_root_dir

詳しい使い方やJenkins連携の方法などは「はじめに」で紹介しているリンク先を参考にしてください。

さいごに

面倒なので build済みのJarファイルをCommitしてしまいました。
以下からDLできます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19