はじめに
僕にそのコピペを直せというのか というエントリで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部分は適宜読み替えて下さい
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できます。