#1.はじめに
pleiadesを使ってJavaの開発環境を構築した際の備忘録
#2.git
2-1.既にgitに登録しているプロジェクトのインポート
手順
- [ファイル]-[インポート]
- [Git]-[Gitからプロジェクト]を選択し、「次へ」
- [クローンURI]を選択し、「次へ」
- 「ソースGitリポジトリー」画面で必要な項目を入力し、「次へ」
- 「ブランチ選択」で、「次へ」
- 適当に次へで進めていくとできた
2-2.新規プロジェクトをgitに登録
手順
- pleiadesでプロジェクトを作成。
- プロジェクトを右クリックし、[チーム]-[プロジェクトの共用]
- リポジトリー・タイプでGitを選択して次へ
- 「プロジェクトの親フォルダー内のリポジトリを使用または作成」にチェックを付け、「リポジトリーの作成」ボタンを押して完了。
2-3.git用TIPS
*.classをコミットしない
プロジェクトの直下に「.gitignore」というファイルを置いて、中に「*.class」と書けばOK
参考URL
https://qiita.com/anqooqie/items/110957797b3d5280c44f
テンプレートファイルがあった。
https://github.com/github/gitignore
誤ってコミットした場合
- pleiadesのパッケージエクスプローラで対象のフォルダ・ファイルを選択し、右クリック。
- [チーム]-[拡張]-[アントラック]を選択する。
なお、コミットしたファイルは追跡対象となり、.gitignoreの設定は反映されないので、追跡対象から外す必要があるので、注意する。
ローカルの修正を破棄
修正を破棄したいファイルを右クリックし、[置換]-[HEADリビジョン]を選択。
空のフォルダをコミット
そのフォルダの下に「.gitkeep」というサイズ0のファイルを置いておく。
3.Eclipse
3-1.定義済み変数
3-2.設定ファイルの説明
gitにコミットするときにソース以外のファイルが出てくるので、コミットする必要があるか、除外設定にした方が良いかを確認した。
org.eclipse.core.resouces.prefs
ファイルの場所:「.settings」フォルダ以下
説明:プロジェクトの文字コードの設定
コミットor除外:コミット
備考:一度設定したらあまり変わることは無いはず(フォルダ増えると変わるかも)
org.eclipse.jdt.core.prefs
ファイルの場所:「.settings」フォルダ以下
説明:プロジェクトのビルドの設定
コミットor除外:コミット
備考:一度設定したらあまり変わることは無いはず
org.eclipse.m2e.core.prefs
ファイルの場所:「.settings」フォルダ以下
説明:Maven2関連のファイル?
コミットor除外:コミット
備考:一度設定したらあまり変わることは無いはず
3-3.フォーマットの自動適用
googleフォーマット
- ウィンドウ→パースペクティブ→パースペクティブを開く→その他→Git
- Gitリポジトリーのクローン→URIの複製→URI:
「https://github.com/google/styleguide.git」 を入力→次へ→次へ→「ローカル宛先」:ディレクトリーは任意の宛先を入力→完了 - ウィンドウ→設定→Java→コード・スタイル→フォーマッターでインポートをクリックし、上でCloneしたディレクトリから「eclipse-java-google-style.xml」を選択→「適用して閉じる」
- ウィンドウ→設定→Java→エディター→保管アクション→「保管時に選択したアクションを実行」にチェック→「ソース・コードのフォーマット」にチェク→「適用して閉じる」
- (既に作成済のソースコードがある場合は、)プロジェクトを右クリック→ソース→フォーマット で全ファイルにフォーマットが掛けられる
以降は、ソースコードを保存する度にフォマット機能が働く
3-4.CheckStyleの警告のフィルタ
CheckStyleを使用する際に、警告が大量に出るので、作成しているクラスの警告のみ出力されるようにフィルタ方法をメモする。
CheckStyle警告は左下の「問題」に表示される。
- 「フィルター」の設定を行う。
- 「新規」ボタンで新規フィルターを作成
- 「名前変更」でわかりやすい名前を付ける。
- 右側の「スコープ」で【選択した要素のみ】を選択する。
- 左側の「構成」で今作成したフィルターのみを選択する。
3-5.バージョン指定
Mavenでは問題ないが、Ant環境でJavaのバージョン指定せずにTomcat上で動くjarを作成しているときに、バージョンが異なるとエラーになった。
Eclipse全体の設定と、プロジェクトの設定がある。
3-5-1.Eclipse全体設定
- [ウインドウ]-[設定]で「設定」画面を表示する。
- 「設定」画面で、[Java]-[インストール済のJRE]でJREを必要に応じて登録
- 「設定」画面で、[Java]-[コンパイラー]で、コンパイラー準拠レベルを指定
4.Maven
プロジェクトはMavenプロジェクトとする。
Mavenについては以下のスライドが参考になる。
Mabenの真実とウソ
デフォルトのライフサイクルは
process-resources
↓
compile
↓
test
↓
package
↓
install
↓
deploy
4-1.コンパイル
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>8</release>
</configuration>
</plugin>
</plugins>
</build>
メモ:sourceとtargetに1.8と書くやり方は古かった
ただ、release表記はJava9からという情報もあり、「releaseは無効なフラグです。」とエラーが出た場合は、sourceとtarget表記に戻す。
4-1-1. バージョン指定
バージョンを指定しないと以下の警告が出るので注意。
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 9, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
調べてみたら3.8.1が最新の模様。
https://maven.apache.org/plugins/maven-compiler-plugin/download.cgi
4-1-2.文字コード指定
ソースコードはEclipse標準のUTF-8,CRLFで保存される。
コンパイル時に文字コードを指定していない場合は、以下の警告が出る。
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
「<encoding>UTF-8</encoding>」を指定したけど、解決せず、以下のサイトを見つけた。
4-2.JUnit
Eclipseで設定するのではなく、Mavenで設定する。
4-2-1.依存関係の設定
projectの直下、buildと同じ階層に以下を記述する。
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
</dependencies>
※junit-jupiter-apiとjunit-jupiter-engineを両方各やり方は古かった。
上記でIDEからテストは実行できるが、Mavenからテストはできない。
4-2-2.Mavenからテスト
buildのプラグインに以下を追加する。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<workingDirectory>${project.basedir}/work</workingDirectory>
</configuration>
</plugin>
workingDirectoryは完了に合わせて修正すること。
4-2-3. 実施するテストを選択。
maven-surefire-pluginで「groups」や「excludedGroups」を設定することにより、指定したタグの付いているテストだけを行ったり、行わなかったり可能。
以下のページの「タグでフィルタリングする」を参照。
https://oohira.github.io/junit5-doc-jp/user-guide/
タグのフィルタリングの動きを確認したが、想定通りの動きだった。
4-3. JavaDoc
4-3-1.JavaDocの作成
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<author>true</author>
<source>1.8</source>
<show>protected</show>
<encoding>UTF-8</encoding>
<charset>UTF-8</charset>
<docencoding>UTF-8</docencoding>
<javadocExecutable>${eclipse_home}/../java/8/bin/javadoc</javadocExecutable>
<environmentVariables>
<_JAVA_OPTIONS>-Dfile.encoding=UTF-8</_JAVA_OPTIONS>
</environmentVariables>
</configuration>
</plugin>
Eclipseのコンソールで文字化けが出たので、Eclipseのメニューから
[実行]-[実行構成]を選択し、「環境」タブで以下を設定したら文字化けしなくなった。
変数:_JAVA_OPTIONS
値:-Dfile.encoding=UTF-8
4-3-2.自作のjarファイルのJavaDoc表示
sources.jarを作成し、jarのソースファイルにsources.jarを指定する。
<plugin>
<!-- ソースファイル.jarを作成し、jarファイルとセットで使用してJavaDocを表示できるようにする -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
4-4.CheckStyle
Maven
<build>の<plugin>に以下を書けばとりあえず動くことは確認できた。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>8.17</version>
</dependency>
</dependencies>
<configuration>
<configLocation>google_checks.xml</configLocation>
<failsOnError>true</failsOnError>
<failOnViolation>true</failOnViolation>
<violationSeverity>error</violationSeverity>
<consoleOutput>true</consoleOutput>
</configuration>
<executions>
<execution>
<id>checkstyle</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
Eclipse
Eclipseからはソースを右クリックすると、「CheckStyle」が選べれるようになっているので、「[CheckStyle]-[CheckStyleでコード・チェック]」を選択する。
4-5.依存関係のjarをまとめる。
<plugin>
<!-- 依存するjarファイルをコピーする -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- コンパイルに必要なものだけ。テストに使用するのは含めない -->
<includeScope>compile</includeScope>
</configuration>
</execution>
</executions>
</plugin>
CheckStyleも含まれていないが、理由は調べていない。
4-6.SpotBugs(旧名FindBugs)
<plugin>
<!-- SpotBugs(旧名FindBugs) -->
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.1.4</version>
<dependencies>
<dependency>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs</artifactId>
<version>4.1.4</version>
</dependency>
</dependencies>
<configuration>
<effort>Default</effort>
<threshold>Default</threshold>
<failOnError>true</failOnError>
<trace>true</trace>
<xmlOutput>true</xmlOutput>
</configuration>
<executions>
<execution>
<id>spotbugs</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
4-7.Jacoco
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.3</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
Jacocoのカバレッジが取れないが、テストのために作業フォルダを変更しているからか?
手動では取れるので、いったんJenkinsのJacocoは諦める。
5-8.PMD
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.14.0</version>
<dependencies>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-core</artifactId>
<version>6.29.0</version>
</dependency>
<dependency>
<groupId>net.sourceforge.pmd</groupId>
<artifactId>pmd-java</artifactId>
<version>6.29.0</version>
</dependency>
</dependencies>
<configuration>
<rulesets>
<ruleset>/category/java/bestpractices.xml</ruleset>
<ruleset>/category/java/codestyle.xml</ruleset>
<ruleset>/category/java/design.xml</ruleset>
<ruleset>/category/java/documentation.xml</ruleset>
<ruleset>/category/java/errorprone.xml</ruleset>
<ruleset>/category/java/multithreading.xml</ruleset>
<ruleset>/category/java/performance.xml</ruleset>
<ruleset>/category/java/security.xml</ruleset>
</rulesets>
<targetJdk>8</targetJdk>
<failOnViolation>true</failOnViolation>
<failurePriority>0</failurePriority>
<printFailingErrors>true</printFailingErrors>
<verbose>true</verbose>
<analysisCache>true</analysisCache>
</configuration>
<executions>
<execution>
<id>PMD</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
<goal>cpd-check</goal>
</goals>
</execution>
</executions>
</plugin>
4-9.循環参照チェック
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.9.1</version>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jdepend-maven-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.1.1</version>
</plugin>
</plugins>
</reporting>
maven-site-pluginはレポートではなくビルドの下にする必要がある。
4-20.POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kero</groupId>
<artifactId>tool</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<!-- コンパイル用、Java8でコンパイルする -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>8</release>
</configuration>
</plugin>
<plugin>
<!-- JUnitをMavenで実行するのに使用 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<!-- ソースファイル.jarを作成し、jarファイルとセットで使用してJavaDocを表示できるようにする -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<!-- JUnit用 -->
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
</dependencies>
</project>
4-30.Mavenコマンド
依存ライブラリが更新されない場合
dependency:purge-local-repository
を使ってそのプロジェクトの依存ライブラリを一度purge(浄化)する。
使用していないライブラリを確認
dependency:anylyze
5.Jenkins
5-1.インストール
Windows10でService Logon Credenials
管理者権限でコンピューターにログオンします。
「管理ツール」を開き、「ローカルセキュリティポリシー」を開きます
[ローカルポリシー]を展開し、[ユーザー権利の割り当て]をクリックします
右側のペインで、[サービスとしてログオン]を右クリックし、プロパティを選択します。
[ユーザーまたはグループの追加...]ボタンをクリックして、新しいユーザーを追加します。
[ユーザーまたはグループの選択]ダイアログで、入力するユーザーを見つけて[OK]をクリックします
「サービスとしてログオンのプロパティ」で「OK」をクリックして、変更を保存します。
パスワード
ユーザフォルダの「AppData\Local\jenkins.jenkins\secrets\」
5-2.git-hubとの連携
gitのインストール
gitをダウンロードして、OS再起動すること。gitのコマンドが見つからなくて、最初うまく動かなかった。
その後コンパイルできなくて、それはJDKが入っていないから。
[Jenkinsの管理]-[Global Tool Configuration]から「JDK」でJAVA_HOMEを指定したら動いた。
あと関係あるかわからないが、ジョブの設定で、Mavenの高度な設定でPOM.XMLをフルパス指定している。
5-3.ジョブ作成
5-3-1.新規ジョブ作成
- フリースタイル・プロジェクトのビルドを選択し、ジョブを作成。
5-3-2.ソースコード管理
- Generalタブの「ソースコード管理」で【git】を選択。
- 「リポジトリURL」に【https://github.com/***/***.git】を入力し、「認証情報」を設定する。
5-3-3.ビルド
- Generalタブの「ビルド」で「ビルド手順の追加」から【Mavenの呼び出し】を選択。
- 「ゴール」に【install】を指定。
5-3-4.CheckStyle
- 「ビルド後の処理」で【Record compiler warnings and static analysis results】を選択。
- 「Report File Pattern」に【**/checkstyle-result.xml】を指定。
- 「Report Encoding」に【UTF-8】を指定する。
checkstyle-result.xmlが作成されない場合は、
mvnをpackageにしていたのが原因。installにすると出力された。
「'windows-31j' seems to be wrong」と出て文字化けするのは、
Jenkins側の文字コード設定の問題。標準ではSJISなので、OSのシステム環境変数に以下をセットする。
「JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8」
これでJenkinsのサービスを再起動すれば、[Jenkinsの管理-[システム情報]の内容が変わって、文字化けしなくなる。
レポートの内容で、実際のコードとの紐付けて表示されないのは、Jenkins側のプラグインの問題で、非推奨のCheckstyleプラグインを使用すれば表示された・・・
5-3-5.JUnitのテスト結果の集計
- 「ビルド後の処理」で【JUnitテスト結果の集計】を選択。
- 「テスト結果XML」に【target/surefire-reports/*.xml】を指定。
Mavenで子プロジェクトを作成している場合は、【*/target/surefire-reports/*.xml】を指定。
5-3-6.テストのカバレッジ
- 「ビルド後の処理」で【JaCoCoカバレッジレポートを記録】を選択。
Jenkinsでカバレッジを取得できない。
maven-surefire-pluginで作業フォルダを指定していたらだと思って、その設定を消しても変化なし。
JavaDocなどの設定も消してみたけど変化なし。
jacoco.execがtargetの下に作られない。下のURLを参考に調査しているが原因不明。
結局Windows10上のJenkinsで動かしていたのが問題で、Windows Server2016のJenkinsだと問題が出なくなった。
カバレッジの見方
MとCはMissedとCovered。
Mが赤で未到達。Cが緑で到達を表していそう。
以下のサンプルコードでカバレッジを計測してみた。
public static void test1(String hoge) {
if (hoge.equals("A") || hoge.equals("B")) {
System.out.println("処理a");
} else {
System.out.println("処理b");
}
if (hoge.equals("C")) {
System.out.println("処理c");
}
}
項目 | カバレッジの種類 | 説明 | 分母 |
---|---|---|---|
instruction | C0 | テスト対象コード中の実行可能なステートメント(命令文)について、テスト実行中に1回以上実行したステートメントの数とパーセンテージをレポートします。 | 23 |
branch | C1 | 制御フローが通過したソースコード中の分岐の数を示します。各「判断文」がすべての分岐点ですべての可能な出力を少なくとも1回得た場合、判断文カバレッジは100%になります。 | 6 |
complexity | Cyclomatic Complexity | 循環複雑度 | 4 |
行 | Lines | ソースコード中の実行可能な行について、制御の流れが最低 1 回達した行の数を示します。すべての実行可能な行に制御の流れが最低1回達した場合、行カバレッジは100%です。 | 6 |
メソッド | Methods | テスト対象コード中の関数について、最低1回実行された関数の数を示します。すべての関数が最低1回実行された場合、関数カバレッジは100%になります。機能安全規格(ISO 26262)対応で要求されるカバレッジとなります。 | 1 |
テストデータ | instruction | branch | complexity | 行 | メソッド |
---|---|---|---|---|---|
なし | M:23,C:0,0% | M:6,C:0,0% | M:4,C:0,0% | M:6,C:0,0% | M:1,C:0,0% |
A | M:10,C:13,57% | M:4,C:2,33% | M:3,C:1,25% | M:2,C:4,67% | M:0,C:1,100% |
A,C | M:0,C:23,100% | M:1,C:5,83% | M:1,C:3,75% | M:0,C:6,100% | M:0,C:1,100% |
A,B,C | M:0,C:23,100% | M:0,C:6,100% | M:0,C:4,100% | M:0,C:6,100% | M:0,C:1,100% |
C0とC1はそれぞれ確認する必要があり、C1を見ればC0を見なくても良いという話では無い。
極端な例では、分岐が100個あり、99個の分岐は処理は1行だけでテストを実施している。残りの1つの分岐が10000行の処理がありテスト未実施とする。
この場合は、C0は1%で、C2が99%のような値となる。そのため、C0とC1の両方を確認する必要がある。
また、C1では複雑なIF分の条件などはカバーできないため、complexityについても確認する必要がある。
5-3-7.SpotBugs
- 「ビルド後の処理」で【Record compiler warnings and static analysis results】を選択。
- 「Report File Pattern」に【**/spotbugsXml.xml】を指定。
- 「Report Encoding」に【UTF-8】を指定する。
5-3-8.ステップ数計測
これはJenkinsのみの作業になるため、pom.xmlは修正不要。
Step CounterとSonarQubeがあるが、まずは簡易なStep Counterを使用する。
- プラグインをインストール。
- 「ビルド後の処理の追加」でStep Counterを選択する。
- ファイルの種類に「Java」、解析するファイルパターンを指定で「src/main/java/*/.java」、解析するファイルのエンコーディングを指定で「UTF-8」を指定する。
「ファイルの種類」は識別子なので、自由に設定可能。
解析するファイルパターンのサンプル例
*/src/main/java/**/*.java
ModuleA/src/main/java/**/*.java
##5-9.PMD
5-10.参考情報
以下の記事がすばらしい!
https://qiita.com/kazokmr/items/8dc9182ea638b78ab7b6
6.lombok
6-1.インストール
6-1-1.pom.xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
6-2-2.Eclipseへのインストール
以下の場所にjarファイルが保存される。
C:\Users\<ユーザフォルダ>.m2\repository\org\projectlombok\lombok\1.18.6
java -jar ファイルパス\lombok-1.18.6.jar