Versions
- Intellij IDEA 2020.3
- Gradle 6.8.1
- gradle-idea-ext-plugin 0.10
Contents
Copyright を自動で設定したい
Intellij IDEA には バンドルプラグインとして Copyright プラグインというものがあり、各ファイルに copyright 表記を自動的に付与したりしてくれる。
各種設定や copyright template に埋め込み可能な変数などは以下のリンク先のようになっている。
Copyright Profiles | IntelliJ IDEA
この設定を自プロジェクトに反映し、他の人が参加した時にも設定してほしいが手作業による追加を極力減らしたい、ということを考える。
Intellij IDEA で設定を共有する
調べた限りだと以下のような方法がある。
Intellij IDEA で生成された Copyright 設定を共有する
Intellij IDEA は .idea
ディレクトリ以下を VCS に追加することによって設定を共有可能にしている。
https://intellij-support.jetbrains.com/hc/en-us/articles/206544839intellij-support.jetbrains.com
Copyright プラグインの設定は .idea/copyright
ディレクトリに設定されるためこのファイルを VCS にコミットして共有すると良さそう。
gradle buildscript で Intellij IDEA に設定する
Gradle には bundle の idea plugin があるが、それとは別に idea-ext という jetbrains が開発している gradle plugin がある。
この plugin は idea plugin よりも細かく設定が追加できるような機能を提供している様子。 そのうち copyright についても設定可能な様子。
https://github.com/JetBrains/gradle-idea-ext-plugin/wiki#copyright
copyright { useDefault = "MyDefaultCopyright" // copyright profile to use by default profiles { // container for named profiles MyDefaultCopyright { // name of a profile notice = "My License text Here" // license text, usually multi line keyword = "keywords" } UnusedLicense { notice = "Another license text" } }
kotlin DSL の場合はなぜか以下のように しないと Extension of type 'ProjectSettings' does not exist.
などで使えない場合があるので これを追加して対応する。これは gradle そのもののコードを見てみると gradle も idea-ext plugin を使っており、 このように対応してる様子。
gradle/gradlebuild.ide.gradle.kts at v6.8.1 · gradle/gradle · GitHub
fun IdeaProject.settings(configuration: ProjectSettings.() -> Unit) = (this as ExtensionAware).configure(configuration) fun ProjectSettings.copyright(configuration: CopyrightConfiguration.() -> Unit) = (this as ExtensionAware).configure(configuration)
追記: 1.1.3 あたりで kotlin DSL にも対応したようなので不要。
idea { module { excludeDirs = setOf(layout.projectDirectory.file("intTestHomeDir").asFile) } project { settings { configureCopyright() configureRunConfigurations() doNotDetectFrameworks("android", "web") } } } fun ProjectSettings.configureCopyright() { copyright { useDefault = GradleCopyright.profileName profiles { create(GradleCopyright.profileName) { notice = GradleCopyright.notice keyword = GradleCopyright.keyword } } } }
Code Reading
Intellij IDEA 側は ConfigurationHandler
というクラスのサブクラスで map 形式のデータを受け取っている。
gradle-idea-ext plugin の方も Map を作っているようなので Intellij IDEA 側は何らかの形で gradle から map object を受け取って処理している?