フォーラム » つれづれ Java編 »
IntelliJ IDEA
IntelliJ IDEA Community版およびUltimate版をインストールして動かしてみたメモなど。
- IntelliJ IDEA Community 2017.1.4版~
- IntelliJ IDEA Ultimate 2022.2版〜
- Windows 10 Pro 64bit
- macOS 11 Big Sur
返答 (34)
git.exeが見つからない - 高橋 徹 さんがほぼ8年前に追加
IntelliJ IDEAを起動し、[Check out from Version Control]から[Github]を選ぶと、
git.exeが見つからないとのエラーダイアログが表示されます。
このマシンには、Cygwinのgit、SourceTreeが入っていますが、Git for Windowsはインストールしていません。
SourceTreeに含まれるgit.exeが使えるようです。SourceTreeのgit.exeの場所は通常次にあります。%APPLOCALDATA%\Atlassian\SourceTree\git_local\bin\git.exe
画面右下の[Configure] > [Settings] で、「Default Settings」画面を開きます。
左側ペインで[Version Control] > [Git]を選択、右側ペインで、[Path to Git executable]欄の[…]ボタンを押し、ファイルダイアログで APPLOCALDATA へ行こうとしますが、ユーザーディレクトリ直下にAppDataが表われません(隠し属性となっているからか?)。ファイルダイアログの上の欄にテキストで直接AppDataを入れると表われます。
idea_start-1.png (19.5 KB) idea_start-1.png | Welcom to IntelliJ IDEA画面 | ||
idea_start-2.png (7.24 KB) idea_start-2.png | Error Running Gitエラーダイアログ | ||
idea_start-3.png (38.6 KB) idea_start-3.png | Default Settings画面 |
フォントがぁ… - 高橋 徹 さんがほぼ8年前に追加
ソースコードのフォントが、ギザギザ(ビットマップフォント)です。
IntelliJ IDEAは、Javaで作られており、自身を実行するJavaVMはインストーラと一緒に配布されています。
典型的には、IntelliJ IDEAをインストールしたディレクトリの中、C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.4\jre64\
にJavaVM(JRE)が存在します。JREのWindows版における等幅フォント(Monospaced)はデフォルトではMS ゴシックです。
まず、IntelliJ IDEAの設定でフォント指定が可能かを模索しました。
[File]メニュー > [Settings...] で「Settings」画面を開き、左側ペインで[Editor] > [Colors & Fonts] > [Font]とドリルダウンし、右側ペインの[Primary font:]欄でフォントを選択します。
ここでは、プログラミング向けと言われる Consolas フォントが選択できます。
Consolas フォントを選択した後のエディタの表示は次のようになりました。
英数字はConsolasフォントですが、日本語文字はギザギザの(おそらくMS ゴシック)フォントとなっています。
これは、Consolasフォントが英数字フォントで日本語フォントは持っていないため、代替フォントで別なフォント(おそらくMS ゴシック)が使われていると思われます。
そこで、英数字および日本語の両方を具える等幅フォント(字幅は、英数字:日本語文字が1:2)を別途入手・インストールして指定することにします。候補は次です。
- Myrica
英数字にInconsolataフォント、日本語文字に源ノ角ゴシック系フォントを使用しています。英数字と日本語の字幅は1:2となっています。 - Ricty Dimished
英数字にInconsolataフォント、日本語文字にCircle M+ 1mフォントを使用しています。英数字と日本語の字幅は1:2となっています。
MyricaM フォントを設定したIntelliJ IDEAのエディタ画面は次です。
まずまずの感じです。行間が狭いですが、フォント設定の右わきに[Line spacing]欄があり、デフォルトの1.0から1.2あたりに増やすといい感じです。
Ricty Dimished フォントを設定したIntelliJ IDEAエディタ画面は次です。
Rictyは、フォントがガチャガチャに表示されます。RictyはCleartypeに対応していないため、MacTypeなどのレンダリングを別途入れないとダメとの話があるようです。
MacTypeを入れたとしても、Java(Swing GUI)はMacTypeを認識しないのでたぶんRictyの表示が改善されないままかと思います(未検証)。
次は、IntelliJ IDEAが内包するJREのフォントを設定する方法を模索します。
等幅フォント(Monospaced)に、英数字にConsolasフォントを、日本語文字に游ゴシックUIフォントを指定したfontconfig.propertiesファイルを作成し、C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.4\jre64\lib\fontconfig.properties
として配置します。
fontconfig.propertiesの設定方法については、Javaフォント設定Windows編あたりを参照ください。この方法は、英数字と日本語が1:2ではありません。
まとめ
IntelliJ IDEAのエディタ用フォントは、英数字:日本語の字幅が1:2に調整された Myricaフォントがよかったです。
FontSetting-1.png (49.3 KB) FontSetting-1.png | エディタのフォントを選択 | ||
FontSettings-2.png (18.8 KB) FontSettings-2.png | 日本語はギザギザのまま | ||
FontSettings-3.png (25 KB) FontSettings-3.png | MyricaMフォントを指定 | ||
FontSetting-4.png (28.2 KB) FontSetting-4.png | JREのfontconfig.propertiesにConsolasおよび游ゴシックUIを指定し、Monospacedを指定 | ||
FontSetting-5.png (24.8 KB) FontSetting-5.png | Ricty Dimishedフォントを指定 |
リポジトリに入れるべきでないファイル - 高橋 徹 さんが約7年前に追加
参考情報
How to manage projects under Version Control Systems
ここによると、
- .ideaディレクトリ以下のファイルは、workspace.xmlおよびtasks.xmlを除きリポジトリで管理する
- .imlファイル(モジュールディレクトリに置かれるIntelliJが使用するもの)はリポジトリで管理する
但し、GradleまたはMavenベースのプロジェクトでは.imlファイルは管理しない - gradle.xmlは管理しない
- GradleまたはMavenベースのプロジェクトで.idea/libraries以下のXMLファイルは管理しない
- dictionariesディレクトリは管理しない
上記に基づく設定の例がGitHubから提供されている。
GitHubのgitignore IntellJ用設定
だがしかし、設定例ではダメなケースあり。
- サブディレクトリ以下にプロジェクトルートがある場合
.idea/**/workspace.xml
は、リポジトリルートの.ideaの下のどこかの階層にあるworkspace.xmlを無視するので、サブディレクトリのどこかの.idea/worksace.xmlは無視されない
IntelliJ IDEAのデフォルト(ディレクトリベース)のプロジェクトと、Gradleベースのプロジェクトでは無視ファイル定義を共通にすることができない。
- .idea/librariesをIDEAデフォルトは無視しないがGradleベースは無視する対象
- .imlをIDEAデフォルトでは無視しないがGradleベースは無視する対象
Android Studioの場合の無視ファイル設定に関し、IntelliJ IDEAのプロジェクト管理ファイルの説明をしている記事があった。
Android Studio最速入門~効率的にコーディングするための使い方 第34回 バージョン管理ープロジェクト管理ファイルについて[中編]
- プロジェクトホームディレクトリに.ideaディレクトリがあればIDEAのプロジェクトとして認識される
- (Gradleベース).imlはbuild.gradleから再生成可能。.imlを削除するときは.idea/modules.xmlも削除する
Gradleプロジェクト - 高橋 徹 さんが約7年前に追加
新規プロジェクトでGradleプロジェクトを作成するときの各設定について
Kotlin TornadeFXを使うときの設定をしながら調べたこと
- [追加のライブラリーおよびフレームワーク]
Kotlin(Java)だけ選択 - [グループID]は、Mavenの命名慣習ではパッケージ名を入れる
- [アーティファクトID]は、JARファイル名から拡張子を除いたものを入れる
- [バージョン]はそのまま(1.0-SNAPSHOT)
- [自動インポートを使用する](auto-import) →とりあえずしない
build.gradleの自動同期をOFFにする - marsのメモ
によると、build.gradle(Gradleのビルドスクリプトファイル)を変更するたびに同期処理が動くとある。さらに調べると、build.gradleを変更するとIntelliJ IDEAが再度プロジェクトを作り直すようなものらしい(Gradle設定からプロジェクトをインポートする)。かなり煩わしい模様。 - [モジュールのグループ化]で、[using explicit module groups]か[using qualified names]の選択、デフォルトのまま(詳しく調べず)
- [ソース・セットごとに個別のモジュールを作成する](チェックが付いたままとする、詳しく調べず)
- [生成されたプロジェクト・ファイルを外部に保管する](チェックがないままとする、詳しく調べず)
- [デフォルトのgradleラッパーを使用する(推奨)]か[ローカルのgradleディストリビューションを使用する]かの選択は、デフォルトの方
gradlew を使うかどうかの選択。現時点ではgradlewはJDK 9を使用していると次のエラーとなるので、その時はローカルに最新のgradleをインストールしそれを使用する設定にする。sync failed
Could not determine java version from '9.0.4'.
IntelliJ IDEA Community Edition 2018.1へのアップデート - 高橋 徹 さんが約7年前に追加
2017.xを入れたときは、更新があるとパッチをダウンロードして適用してくれていたけど、2017.3.5上で[ヘルプ]メニュー > [更新の確認]では更新があること(2018.1)は表示されるが、パッチを適用するような動きがなく、IntelliJ のダウンロードページをブラウザで開くのみでした。
そこで、2018.1のインストーラーを実行、すると2017.3を削除することを聞いてくるのでガツっと削除を指定し、2018.1をインストールした。
インストール後実行すると、「Cannot Run Git - File not found: git.exe」と通知が出るので、message#58 の手順でSourceTreeのgit.exeを指定した。
JUnit のテストケースを生成する方法 - 高橋 徹 さんが約6年前に追加
IntelliJ IDEA 2018.3.4での模索
ユニットテストの作成は、メニューにはなく、テスト対象クラスをエディタで開き、右クリックから[Generate] > [Test] でダイアログが開く
上の画面で、"JUnit5 library not found in the module"と表示され、その右側に[Fix]ボタンがあります。
[Fix]ボタンを押すと、必要なライブラリ(JARファイル)をmavenリポジトリから指定したフォルダへダウンロードします。
ダウンロード後、モジュールのDependenciesにJUnitが追加されています。
マルチモジュールのプロジェクトを作るなら、ダウンロードしたJARをGlobal Librariesに設定するのがよいと思います。
なお、IntelliJ IDEA 2018.3.4では、JUnit4のライブラリ(JARファイル)は一緒にインストールされているので、上述の[Fix]ボタンからmavenリポジトリを利用しなくても、手動でJUnit4を指定することが可能です。しかし、JUnit5 はIntelliJ IDEAには含まれていないので(探した限りは見つからなかった)、[Fix]ボタンから取得するのがよさそうです。
create_test-3.png (30.1 KB) create_test-3.png | Create Testダイアログ | ||
create_test-1.png (22.2 KB) create_test-1.png | テスト対象クラスのエディタ上で右クリックしポップアップメニュー | ||
create_test-2.png (5.49 KB) create_test-2.png | Generateメニュー |
新規モジュール作成 - 高橋 徹 さんが約6年前に追加
既存のプロジェクトに新規モジュールを追加する操作で、Content root と Module file location のディレクトリを尋ねられる。
Content root を指定するファイル選択ダイアログには、"Selected directory will be marked as module content root" と記述され、
Module file location を指定するファイル選択ダイアログには、"Module .iml file would be placed in selected directory" と記述されている。
通常はこの2つは同じディレクトリでよく、プロジェクトディレクトリの直下にモジュール名と同じ名前で作成する。
ある時突然kotlincでコンパイル初めてエラーに - 高橋 徹 さんが約6年前に追加
ディレクトリベースのJavaプロジェクト(マルチモジュール、JPMS、JavaFX)で開発をしていたら、
ある時点から突然Buildでkotlincを実行しようとしてkotlin standard libraryがないとエラーになってしまった。
kotlinはまったく使っていないにもかかわらず。
[File]メニュー > [Invalidate Caches / Restart]を実行、再起動したあとビルドしたが現象変わらず・・・
次に、Rebuild Projectしたところ、現象が収まった。
環境は
Windows 10 Professional 64bit(1803版)
IntelliJ IDEA 2018.3.4
ZuluFX 11.0.1 64bit
ディレクトリベースのプロジェクト、2つモジュール生成、うち1つはJPMS(Java Platform Module System)
JavaFXアプリケーションでFXML使用。
ユニットテストはJUnit 5使用
他にRS232C通信のライブラリ jSerialComm を使用
類似現象の情報あり
https://intellij-support.jetbrains.com/hc/en-us/community/posts/360000891860-Kotlin-Compile-Error
プロジェクトをgitでバージョン管理する(はじめの一歩) - 高橋 徹 さんが約6年前に追加
Javaのプロジェクトを作成、ある程度形ができてきたので、バージョン管理を始めたい。
まず、プロジェクトのトップディレクトリに、git initでリポジトリを作成するのだが、外部のgitツールで作成するか、IntelliJ IDEAから作成するか?
IntelliJ IDEAのドキュメント(2018.3)を調べると次のURLに手順が記載されている。
https://www.jetbrains.com/help/idea/set-up-a-git-repository.html
- [VCS]メニュー > [Enable Version Control Integration]
この操作後、バージョン管理ツールを選択(Git)するとプロジェクトのトップディレクトリに.gitフォルダが生成され、プロジェクトがバージョン管理下に入る。
注).gitフォルダは隠し属性が付いていたので、コマンドプロンプトからdir /a で確認する
外部gitツールでinitすると、このメニューは表示されないので注意。.gitフォルダを消してもダメ(IntelliJ IDEAが一度プロジェクトをバージョン管理下と認識すると、明示的にバージョン管理下から外す操作が必要)。
上述操作後、.idea/vcs.xmlをGitに追加するか聞いてくるが、要否不明なので今は入れないでおく。(必要と判明すれば後で追加)
この時点では、gitignoreファイルは生成されない。
[Version Control]タブを見ると、バージョン管理外のファイル一覧に、outフォルダ下のビルド結果(*.classファイル等)も表示されている。
IntelliJ用のgitignoreファイルを公開しているサイトがあるので、これを流用するのもよい。
https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore
手動で無視ファイルを指定する場合は、「Version Control」ペインで[Unversioned Files]を展開してから、
- 任意のクラスファイル(*.class)を右クリック、ポップアップメニューーから[Ignore]をクリック、[Ignore all files under]ラジオボタンをチェックし右側でoutフォルダを指定する
- .ideaフォルダ下のworkspace.xmlは、上述Unversioned Filesには含まれていなかった
- encodings.xml UTF-8、BOMなしの定義が書かれている。⇒ 要管理
- misc.xml JDKの定義が書かれている。⇒ 使用するJDKを識別する(OSデフォルトでないJDKを使用)なら要
- modules.xml プロジェクト配下のモジュール一覧が定義されている。⇒ 要管理
- uiDesigner.xml ローカル(マシン固有)のUIデザイナー設定を保管する。⇒ 不要(IntelliJ IDEA標準gitignoreにも記載あり)
- vcs.xml Gitを使うとの定義が記載。⇒ とりあえず要としておく
- workspace.xml 前回終了時の画面構成を再現するための定義が記載。ユーザー固有定義。⇒ 不要(IntelliJ IDEA標準gitignoreにも記載あり)
さて「Version Control」ペインで[Unversioned Files]をgitに追加していき(ファイルを選択し、Ctrl + Alt + A)、まとめてコミットしようとした([VCS]メニュー > [Commit])。すると、ファイルの改行コードがCRLFなので、core.autocrlfをtrueにすることを推奨するダイアログが表示された。Commitを見合わせ、対処を検討しよう。
- IntelliJ IDEAはデフォルトでは改行コードはシステム依存(WindowsであればCRLF)。
[File]メニュー > [Settings] で、左側ペインで[Editor] > [Code Style]を選択、右側ペインで[Line separator]欄 で変更可能
Gitリポジトリ内は、ファイルエンコーディング(改行コードを含む)を統一した方がよいので、通常はLFとする。
Windows上では、改行コードCRLFを誤ってGitリポジトリに登録しないように、gitのcore.autocrlf設定をtrueまたはinputにしておく。trueとinputの違いは、trueは出し入れともにLFとCRLFの変換をするが、inputは入れるときだけCRLF→LFとし、出すときは改行コードはそのままとする。
注)バッチファイル等CRLFでないとダメなファイルを管理する場合は、core.autocrlfをtrueにするか、gitattributesで*.bat text eol=crlf とする
検討結果、対処は次とした。
- IntelliJ IDEAが使用する外部Gitでcore.autocrlfをinputに変更(変更前はfalse)
- この先バッチファイル等改行コードがCRLFでないとダメなファイルをバージョン管理下に置く時が来たら、.gitattributesに対象ファイルの設定を記載
さて、ようやくコミットできると思いきや、code analysisが走っていろいろ警告が出た。デフォルトでCommit前に[Perform code analysis]となっている。
これはなかなかいいね! でも修正はせずコミットしてしまおう。もうすぐ飛行機が着陸なので片付けなければ(機内作業中)。
自前のプロジェクトテンプレートを設ける - 高橋 徹 さんが約6年前に追加
JavaFXアプリケーションの雛形をプロジェクトテンプレートで用意しようという企画です。
標準で付いているJavaFXは、FXMLを使う雛形を生成しますが、さらにCSSおよびリソースバンドル・プロパティファイルを使う雛形とします。
また、Java SE 9で搭載されたモジュールシステム対応もしておきます。
雛形用にプロジェクトを作成¶
samplefx +- .idea +- src | +- sample | | +- Sample.properties | | +- SampleApp.java | | +- SampleView.css | | +- SampleView.fxml | | +- SampleViewController.java | +- module-info.java +- samplefx.iml
このプロジェクトをテンプレートとして保存しました。
[Tools]メニュー > [Save Project as Template] で、テンプレート名を指定して保存します。
ここでテンプレートが保存されるのは、ユーザー固有の場所になります。Windowsの場合は、C:\Users\<ユーザー名>\.IdeaIC<バージョン名>\config\projectTemplates\<テンプレート名>.zip
となります。
ひな形を使ったプロジェクトの作成¶
すると、新規にプロジェクトを作成する際、「New Project」画面で左側ペインの[User-defined]を選択すると右側ペインに保存したテンプレート名が表示されます。これを選んで次に進むとプロジェクト名、場所、パッケージ名を入力し、確定すると雛形が展開されます。
ですが、問題が…。
「Cannot load module file '<作業ディレクトリ>\<プロジェクト基点ディレクトリ>\<パッケージ名>.iml' does not exist.
Would you like to remove module '<パッケージ名>' from the project?」
とエラーが発生します(問題1)。
また、プロジェクトペインにソースフォルダが表示されません(問題2)。
問題2は、プロジェクトを再度開き直すと解消します。
問題1について、調査を進めます。
問題の調査¶
プロジェクトテンプレートのアーカイブファイル内を紐解いていきます。
_\.idea\project-template.xml
<template> <input-field default="sample">IJ_BASE_PACKAGE</input-field> </template>
プロジェクトテンプレートとして保存したサンプルプロジェクトにおいて、パッケージ名をsample
としたところ、この定義が生成されています。
IJ_BASE_PACKAGEという文字列は、雛形のファイルを紐解くと登場してきます。雛形から新規プロジェクトを生成するときに、Base package名を入力しますが、入力したパッケージ名がこのIJ_BASE_PACKAGEに展開されます。
root0\.idea\modules.xml
(抜粋)<module fileurl="file://\$PROJECT_DIR\$/${IJ_BASE_PACKAGE}fx.iml" filepath="\$PROJECT_DIR\$/${IJ_BASE_PACKAGE}fx.iml" />
サンプルプロジェクトにおいて、samplefx.iml
となっていたファイルを参照する定義が、sample
の部分がIJ_BASE_PACKAGE
で置き換えられてしまいます。
一方、samlefx.imlは雛形から生成したプロジェクトでもそのままのファイル名で生成されます。
この不一致がエラーの原因となっています。
Project templates - attributes for place holders : IDEs Support (IntelliJ Platform)|JetBrains
実行設定のVMオプションが格納されるファイル - 高橋 徹 さんがほぼ6年前に追加
実行(Run)の設定でVMオプションを指定した際、
.idea\workspace.xml
に指定内容が保存されていました。
このファイルはリポジトリに入れて共有すべきではない設定ファイルとされているので、
実行時のVMオプションを共有するのは実行用バッチファイルを別途作るべきなのかもしれない。
静的解析ツール Checkstyle - 高橋 徹 さんが約5年前に追加
ソースコードを編集中にチェックを実施できるプラグインがあるか調査
- [File]メニュー > [Settings] で「Settings」画面を開き、左側ペインで[Plugins]を選択、真ん中上部の[Type / to see options]に、"checkstyle"と入れると、中側ペインに関係するプラグインがリストされます。プラグインを選択すると右側に説明が表示されます。checkstyleを扱うプラグインは多数リストされていますが、日付が新しく、ダウンロード数が多いものから2つ3つリストアップします。
プラグイン名 | 更新日 | DL数 | レーティング |
---|---|---|---|
CheckStyle-IDEA | 2020-01-29 | 2.8M | 4.4 |
QAPlug - Checkstyle | 2020-01-29 | 79.7K | 3.9 |
CS 61B | 2019-01-07 | 25.5K | 4.6 |
QAPlug は、PMD用、FindBugs用など一連の性的解析ツールをまとめるプラグインで、QAPlug も必要となります。
まずは一番メジャーそうなCheckStyle-IDEAをインストールします。
プラグインをインストールし再起動すると、「Settings」画面の左側ペインに[Checkstyle]が追加されていました。(添付画像)
ルール定義は、デフォルトで2種類(Sun ChecksとGoogle Checks)が用意されており、簡単に適用できるようになっています。また、独自のルール定義ファイルを指定することもできます。ルール定義ファイルはHTTPでアクセスする箇所でも配置可能です。
ルールを適用すると、リアルタイムチェックが動作し、エディタ上でルール逸脱箇所がチェックされます。(添付画像)
エディタ画面は、リアルタイムに検査した結果が表示されます。下側ペインのCheckStyleは、手動でチェック開始(緑色の▼ボタン)を押すと検査が開始され、結果をツリーで表示しています。
Settings_Checkstyle-1.png (44.7 KB) Settings_Checkstyle-1.png | Settings画面のCheckstyle | ||
Checkstyle_Result-1.png (95.6 KB) Checkstyle_Result-1.png | Checkstyle動作結果 |
QAPlug - Checkstyleの調査 - 高橋 徹 さんが約5年前に追加
QAPlugシリーズの一つ QAPlug - Checkstyleを入れて使い勝手を調査してみた。
- [Analyze]メニュー > [Analyze Code]でチェック実施(手動)
- 「Settings」で[Editor] > [Inspections] で [QAPlug]にチェックを付けるとリアルタイムスキャンが有効になる
解説動画
https://www.youtube.com/watch?v=syAcj-FEaAU
リアルタイムスキャンの設定あり
ルール定義ファイルは、URL指定ではない(ファイル選択ダイアログで指定)ので、CheckStyle-IDEAプラグインのようにHTTPで共有することは難しそう(各自のマシンにルール定義ファイルを配置する必要がある)。
IntelliJ IDEA画面に背景画像 - 高橋 徹 さんが約5年前に追加
日本語ドキュメントの以下URLに背景画像の設定方法があります。
https://pleiades.io/help/idea/setting-background-image.html
ショートカットでCtrl+Alt+S、または[File]メニュー > [Settings]で、左ペインの[Appearance & Behavior] > [Appearance]をドリルダウンし、右ペイン中付近の[Background Image]ボタンで設定を開きます。
画像ファイルの選択、配置パターン(原寸で1つ配置、画面全体に拡大、原寸でタイル状に埋める)、透過度、左右反転、上下反転が指定可能です。画像の任意拡大縮小はないようです。
ダークテーマの場合、宇宙関係の画像が割といい感じにマッチします。
Ant生成 - 高橋 徹 さんが約5年前に追加
[Build]メニュー > [Generate Ant Build]でAntファイルを生成できます。
Antファイルの生成方法は次の2つがあります。
- 複数ファイルの生成(モジュール毎に1つとメインを1つ) → Generate multiple-file ant buildにチェック
- 単一ファイルの生成 → Generate single-file ant buildにチェック
小さなアプリケーションやライブラリでは、単一ファイルの生成を、マルチモジュールプロジェクトでは複数ファイルの生成をする想定かな?
- Enable UI forms compilation (requires "javac2" ant task from IDEA distribution) は、GUIデザイナーで画面を定義したプロジェクトの場合に使用するので、GUIデザイナーをつかていなければチェックは外しておく
- Use JDK definitions from project files は、使用するJDKの設定をIDEAのプロジェクト定義から引っ張ってくるのですが、コマンドラインからAntビルドするときは設定がちょっと大変かも。
- JDK definitionsの例を表示隠す
<property name="jdk.bin.zulufx_11" value="${jdk.home.zulufx_11}/bin"/> <path id="jdk.classpath.zulufx_11"> <fileset dir="${jdk.home.zulufx_11}"> <include name="../zulufx-jdk-11!/java.base"/> <include name="../zulufx-jdk-11!/java.compiler"/> <include name="../zulufx-jdk-11!/java.datatransfer"/> <include name="../zulufx-jdk-11!/java.desktop"/> <include name="../zulufx-jdk-11!/java.instrument"/> <include name="../zulufx-jdk-11!/java.logging"/> <include name="../zulufx-jdk-11!/java.management"/> <include name="../zulufx-jdk-11!/java.management.rmi"/> <include name="../zulufx-jdk-11!/java.naming"/> <include name="../zulufx-jdk-11!/java.net.http"/> <include name="../zulufx-jdk-11!/java.prefs"/> <include name="../zulufx-jdk-11!/java.rmi"/> <include name="../zulufx-jdk-11!/java.scripting"/> <include name="../zulufx-jdk-11!/java.se"/> <include name="../zulufx-jdk-11!/java.security.jgss"/> <include name="../zulufx-jdk-11!/java.security.sasl"/> <include name="../zulufx-jdk-11!/java.smartcardio"/> <include name="../zulufx-jdk-11!/java.sql"/> <include name="../zulufx-jdk-11!/java.sql.rowset"/> <include name="../zulufx-jdk-11!/java.transaction.xa"/> <include name="../zulufx-jdk-11!/java.xml"/> <include name="../zulufx-jdk-11!/java.xml.crypto"/> <include name="../zulufx-jdk-11!/javafx.base"/> <include name="../zulufx-jdk-11!/javafx.controls"/> <include name="../zulufx-jdk-11!/javafx.fxml"/> <include name="../zulufx-jdk-11!/javafx.graphics"/> <include name="../zulufx-jdk-11!/javafx.media"/> <include name="../zulufx-jdk-11!/javafx.swing"/> <include name="../zulufx-jdk-11!/javafx.web"/> <include name="../zulufx-jdk-11!/jdk.accessibility"/> <include name="../zulufx-jdk-11!/jdk.aot"/> <include name="../zulufx-jdk-11!/jdk.attach"/> <include name="../zulufx-jdk-11!/jdk.charsets"/> <include name="../zulufx-jdk-11!/jdk.compiler"/> <include name="../zulufx-jdk-11!/jdk.crypto.cryptoki"/> <include name="../zulufx-jdk-11!/jdk.crypto.ec"/> <include name="../zulufx-jdk-11!/jdk.crypto.mscapi"/> <include name="../zulufx-jdk-11!/jdk.dynalink"/> <include name="../zulufx-jdk-11!/jdk.editpad"/> <include name="../zulufx-jdk-11!/jdk.hotspot.agent"/> <include name="../zulufx-jdk-11!/jdk.httpserver"/> <include name="../zulufx-jdk-11!/jdk.internal.ed"/> <include name="../zulufx-jdk-11!/jdk.internal.jvmstat"/> <include name="../zulufx-jdk-11!/jdk.internal.le"/> <include name="../zulufx-jdk-11!/jdk.internal.opt"/> <include name="../zulufx-jdk-11!/jdk.internal.vm.ci"/> <include name="../zulufx-jdk-11!/jdk.internal.vm.compiler"/> <include name="../zulufx-jdk-11!/jdk.internal.vm.compiler.management"/> <include name="../zulufx-jdk-11!/jdk.jartool"/> <include name="../zulufx-jdk-11!/jdk.javadoc"/> <include name="../zulufx-jdk-11!/jdk.jcmd"/> <include name="../zulufx-jdk-11!/jdk.jconsole"/> <include name="../zulufx-jdk-11!/jdk.jdeps"/> <include name="../zulufx-jdk-11!/jdk.jdi"/> <include name="../zulufx-jdk-11!/jdk.jdwp.agent"/> <include name="../zulufx-jdk-11!/jdk.jfr"/> <include name="../zulufx-jdk-11!/jdk.jlink"/> <include name="../zulufx-jdk-11!/jdk.jshell"/> <include name="../zulufx-jdk-11!/jdk.jsobject"/> <include name="../zulufx-jdk-11!/jdk.jstatd"/> <include name="../zulufx-jdk-11!/jdk.localedata"/> <include name="../zulufx-jdk-11!/jdk.management"/> <include name="../zulufx-jdk-11!/jdk.management.agent"/> <include name="../zulufx-jdk-11!/jdk.management.jfr"/> <include name="../zulufx-jdk-11!/jdk.naming.dns"/> <include name="../zulufx-jdk-11!/jdk.naming.rmi"/> <include name="../zulufx-jdk-11!/jdk.net"/> <include name="../zulufx-jdk-11!/jdk.pack"/> <include name="../zulufx-jdk-11!/jdk.rmic"/> <include name="../zulufx-jdk-11!/jdk.scripting.nashorn"/> <include name="../zulufx-jdk-11!/jdk.scripting.nashorn.shell"/> <include name="../zulufx-jdk-11!/jdk.sctp"/> <include name="../zulufx-jdk-11!/jdk.security.auth"/> <include name="../zulufx-jdk-11!/jdk.security.jgss"/> <include name="../zulufx-jdk-11!/jdk.unsupported"/> <include name="../zulufx-jdk-11!/jdk.unsupported.desktop"/> <include name="../zulufx-jdk-11!/jdk.xml.dom"/> <include name="../zulufx-jdk-11!/jdk.zipfs"/> <include name="../zulufx-jdk-11!/org.openjsse"/> </fileset> </path> <property name="project.jdk.home" value="${jdk.home.zulufx_11}"/> <property name="project.jdk.bin" value="${jdk.bin.zulufx_11}"/> <property name="project.jdk.classpath" value="jdk.classpath.zulufx_11"/>
- JDK definitionsの例を表示隠す
生成されたビルドファイルには、JARファイルの生成ターゲットはありませんでした。
→ 調べたところ、先にプロジェクトの設定で成果物(Artifact)にJARを定義してから、Antビルドを生成するとJARファイル生成ターゲットが追加されます。
.idea/misc.xml をリポジトリで管理し共有するかどうか - 高橋 徹 さんが約5年前に追加
Javadocを生成する際の設定(出力先、javadocコマンドラインオプションなど)がmisc.xmlに保持されます。
出力先は、ホームディレクトリからのパスとなっているため、リポジトリで共有するとやっかいです。
しかし、misc.xmlを共有から外すと、プロジェクトで使用するJDKが不明となります。
misc.xmlの記載内容(1) 使用するJDKの設定
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="ZuluFX 11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
misc.xmlの記載内容(2) Javadoc生成の設定
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" value="$USER_HOME$/mywork/satcom/dev/spectrumviewer/SpectrumFileViewer2/out/docs" />
</component>
ここを、$PROJECT_DIR$
を使って書き換えてみたらどうだろう?
- <option name="OUTPUT_DIRECTORY" value="$USER_HOME$/mywork/satcom/dev/spectrumviewer/SpectrumFileViewer2/out/docs" />
+ <option name="OUTPUT_DIRECTORY" value="$PROJECT_DIR$/out/docs" />
書き換え直後はエラーになっていたが、プロジェクトを閉じて開いてをしていたらjavadoc生成ができるようになった。
Ant利用(JPMS) - 高橋 徹 さんが約5年前に追加
Java SE 9以降でモジュールシステムを使ってアプリケーションをビルド・実行するためのAnt記述を調査。
Antで成果物(JAR)を作成するときに、Java SE 8までの実行可能JARを生成するオプションがjarタスクに用意されています。
しかし、Java SE 9以降で実行可能モジュールJARとするためのjarコマンドのオプション(--main-class
)をjarタスクで指定する手段がありません(Antの仕様制限)。
そこで、execタスクでjarコマンドを実行する用に書き換えます。
<target name="artifact.spectrumfileviewer:jar" depends="init.artifacts, compile.module.spectrumfileviewer" description="Build 'SpectrumFileViewer:jar' artifact">
<mkdir dir="${artifact.output.spectrumfileviewer:jar}"/>
<property name="jar.params"
value="--create -f ${temp.jar.path.SpectrumFileViewer.jar} --main-class ${main.class} -C ${spectrumfileviewer.output.dir} ."/>
<exec executable="jar">
<arg line="${jar.params}"/>
</exec>
<copy file="${temp.jar.path.SpectrumFileViewer.jar}" tofile="${artifact.output.spectrumfileviewer:jar}/SpectrumFileViewer.jar"/>
</target>
アンインストール - 高橋 徹 さんが約5年前に追加
Gradleプラグインは有効なのだが、新規プロジェクト作成時に左側ペインにGradleが表れない。
そこで一度IntelliJ IDEAをアンインストールしてインストールしようとして、アンインストールでトラブル発生。
Windowsの[設定]>[アプリ]>[アプリと機能]>[IntelliJ IDEA Community Edition 2018.3.4]>[アンインストール]をクリック
エラーが発生。ちなみに、インストール後何度かIntelliJ IDEA内からアップデートを実施している(現在2019.3.4)。
JetBrainsのIssuesにも幾件か登録されているが、解決策は未記載(おそらく無い)。
→ wmic product list を実行した結果に、[JetBrains]、[IntelliJ]が含まれていなかった。
インストーラーからインストール後、IntelliJのアップデート機能でバージョンを更新すると発生する模様。
Gradleが表れない件は、ひょっとするとIntelliJをインストールする際に、ビルドツールのカスタマイズでGradleをDisableにしていたかもしれない(定かではない)。
なお、ユーザー固有情報が置かれる場所は以下、これを消して再実行でも行けた可能性あり。
- C:\Users\<ユーザー名>\.IdeaIC2019.3\
- C:\Users\<ユーザー名>\AppData\Roaming\JetBrains\
Gradleプロジェクト作成 - 高橋 徹 さんが約5年前に追加
Gradleを使うJavaプロジェクトの作成手順を調査
- [Create New Project] > 左側ペインで[Gradle] > 右側ペインで[Java]にチェックを入れて次へ(以下に画面を示す)
- プロジェクト名、プロジェクトの親フォルダ、グループID、アーティファクトID、バージョンを記入(以下に画面を示す)
- グループIDは、代表パッケージ名とする
- アーティファクトIDは、ビルド成果物のJARファイル名の基底名(バージョン番号と拡張子を除いた部分)とする
- バージョンは、ビルド成果物のJARファイル名の一部として、基底名に続けて付加される
生成されるプロジェクトのディレクトリ構造
プロジェクト基点 +-- .gradle | +-- 5.2.1 | +-- vcs-1 | +-- buildOutputCleanup +-- .idea | +-- codeStyles | | +-- codeStyleConfig.xml | +-- gradle.xml | +-- jarRepositories.xml | +-- misc.xml | +-- workspace.xml +-- gradle | +-- wrapper | +-- gradle-wrapper.properties | +-- gradle-wrapper.jar +-- src | +-- main | | +-- java | | +-- resources | +-- test | +-- java | +-- resources +-- build.gradle +-- gradlew +-- gradlew.bat +-- settings.gradle
- パッケージを追加、Javaクラスを追加、実行
GradleProject-1.png (19.7 KB) GradleProject-1.png | Gradleを使うJavaプロジェクト作成(1) | ||
GradleProject-2.png (12.3 KB) GradleProject-2.png | Gradleを使うJavaプロジェクト作成(2) |
Gradleプロジェクト(続) - 高橋 徹 さんが約5年前に追加
Javaのバージョン指定¶
build.gradleの中身(前回とは別な例)
plugins {
id 'java'
}
group 'com.torutk.spectrum'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
sourceCompatibility
が1.8(Java SE 8)となっているので、ここを使用したいJava SEバージョンに変更する。
IntelliJの「Project Structure」では、11を指定していても、こことは連動していない模様。
IntelliJ 内で実行かGradleで実行か選択可能¶
Gradleプロジェクトをビルド・テストする際、デフォルトではGradleに処理を委ねますが、設定でIntelliJでビルド・テストを実行することも可能です。IntelliJで実行した方が速い模様。
- [File]メニュー > [Settings]で「Settings」画面を開き、左側ペインで[Build, Execution, Deployment] > [Build Tools] > [Gradle]を選択、右側ペインで[Gradle Projects]領域の[Build and run]領域で[Gradle(Default)]を[IntelliJ IDEA]に変更(Build and run usingとRun tests usingの2か所あり)
Gradleプロジェクト(JPMS対応) - 高橋 徹 さんが約5年前に追加
Gradleは今後のバージョンでJPMS(Java Platform Module System)に対応する予定なので、
現時点では限られた対応とするか、有志のプラグインGradle Modules plugin を入れて対応する。
実行ペインの日本語文字化け - 高橋 徹 さんがほぼ5年前に追加
実行結果ペイン(Run)の日本語が化けることあり。
(GradleのJUnitテスト実行時)
次の対処で回避
- [Help]メニュー > [Edit Custom VM Options...] で、編集ペインにidea64.exe.vmoptionsファイルが開く
ここに追記-Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8
ちなみにこのファイルは、%APPDATA%\JetBrains\IdealC2020.1\ ディレクトリ下にあった。
スペルチェック - 高橋 徹 さんがほぼ5年前に追加
ソースコード編集中に、識別子の単語に波線が付くことがある。
スペルチェックが働いているが、複合語(useDetrendProperty
)も単語分解して一つの語(Detrend
)に波線が付く。
- 単語の追加
[File]メニュー > [Settings]で「Settings」画面を開き、左側ペインで[Editor] > [Proofreading] > [Spelling]を選択、右側ペインで[Accepted Words]タブを選択、[+]をクリックし、追加したい単語を記入し[OK]ボタンを押す。- デフォルトでは、プロジェクトディレクトリの@.idea/dictionaries/の下にファイルを生成し追記
IntelliJ IDEA 2020.3.3 のGradleプロジェクトでJDK 16を指定すると‥ - 高橋 徹 さんが約4年前に追加
IntelliJ IDEA 2020.3.3 で、Gradleビルド設定のGradle JVMをデフォルトの Project SDKとしたまま、プロジェクトのJDKを16に設定すると、Gradleのsyncがエラーとなってしまう。
回避策は、
- Gradle JVM の設定を明示的に JDK 15(あるいはそれ以下)とする
- プロジェクトのJDKを15(あるいはそれ以下)とする
です。
IntelliJ IDEAがJDK 16に対応するのは2021.1からなので、まあ仕方がないかなぁ。
IntelliJ IDEA で Androidプログラミング - 高橋 徹 さんが約4年前に追加
Android プログラミングには、Android Studio を使うのが一般的であるが、Android Studio は、JetBrains社製のIntelliJ IDEA をベースにしている。よって、Android Studioでなく、IntelliJ IDEAでもAndroidプログラミングは可能。
IntelliJ IDEA Community Edition で、Androidプラグインを有効にし、最初にAndroidのプロジェクトを作成すると、必要なAndroid SDKのインストールが促される。これに沿って環境を用意すればIntelliJ IDEAでのAndroidプログラミングが可能となる。
動機¶
モバイル用のノートPC [#69] でAndroidプログラミングをしようとした。このPCは、ストレージが少ない(本体128GB)ので、IntelliJ IDEA と Android Studio を2つ入れるのは避けたい。
インストールに関するメモ¶
- Android SDK のコンポーネントの管理は、[Tools]メニュー > [Android] > [SDK Manager]
または、[File]メニュー > [Settings] > 左側ペインで [Appearance & Behavior] > [System Settings] > [Android SDK]
- [Tools]メニュー > [Android] > [AVD Manager] でエミュレータの設定
- 素のAndroidのエミュレータは非常に重く、このノートPCの貧弱なCPUでは使用に耐えないので、HAXM(Intel Hardware Accelerated Execution Manager)をインストールしたがエラーとなってしまった。
- HAMXインストールログ
Version: 7.6.5 Output folder: C:\Program Files\Intel\HAXM Extract: checktool.exe... 100% Execute: C:\Program Files\Intel\HAXM\checktool.exe --verbose CPU vendor * GenuineIntel Intel64 supported * Yes VMX supported - No VMX enabled - No EPT supported - No NX supported * Yes NX enabled * Yes Hyper-V disabled - No OS version * Windows 10.0.19042 OS architecture * x86_64 Guest unoccupied * Yes. 0 guest(s) The system requirements are not satisfied.
- HAMXインストールログ
VMXが無効となっているとログに記載。しかし、BIOSでVT-xは有効となっており、タスクマネージャーのパフォーマンスでCPUを見ると仮想化が有効と表示されている。
何が原因か?
ググってみると、BIOSレベルでVT-xを有効にしていても、Windowsの機能でHyper-Vを有効にしているとVT-xが(Androidツールから)利用できないということがあるらしい。
VirtualCheckerというツールでVT-xのサポート状況を確認できるとあったのでツールを入れて確認してみた。
https://openlibsys.org/index-ja.html
VT-x が Unsupportedになっている。何故?
コマンドでAndroid emulator をチェックオプションで実行してみる
D:\tools\android\Sdk> emulator\emulator -accel-check accel: 0 Please disable Hyper-V before using the Android Emulator. Start a command prompt as Administrator, run 'bcdedit /set hypervisorlaunchtype off', reboot.WHPX (10.0.19042) is installed and usable. accel D:\tools\android\Sdk>
Hyper-Vを無効にせよと出てきた。
このPCのWindows 10はHOMEエディションなのでHyper-Vが利用できないのだが・・・
コントロールパネルからWindowsの機能を開くと
Android Emulator のハードウェア アクセラレーションを設定する ー Hyper-V を無効にする場合に再確認する
によると、「仮想マシン プラットフォーム」が有効になっていると裏で Hyper-V が有効となり、HAXMが利用できなくなる。
回避策は
- 回避策の1)仮想マシン プラットフォームを無効にする
→ WSL2 が利用不可となる - 回避策の2)Windows ハイパーバイザー プラットフォームを有効にする
エミュレーターのパフォーマンスのためのハードウェア(Hyper-V と HAXM)
にも参考情報あり。