build.gradle.ktsのすゝめ
まえがき
Gradle増分コンパイルできて助かるなぁ
→ でもbuild.gradleってタイプセーフじゃないしなぁ (編注: 型はついているものの補完が効かない)
→ そうだbuild.gradle.ktsを使おう
→ IDEAがきっと自動生成してくれるはず
→ してくれねぇ!!!! (死 :innocent:)
ベース
// build.gradle.kts
group = "com.example.yourgroup"
id = "artifact"
// val kotlinVersion = "1.3.71"
plugins {
java
// kotlin("jvm") version kotlinVersion
}
project.sourceSets {
// 実際のソースが格納されているディレクトリ
getByName("main") {
java.srcDir("src/main/java")
}
// テスト用のディレクトリ
getByName("test") {
java.srcDir("src/test/java")
}
}
tasks.processResources {
filteringCharset = "UTF-8"
from(sourceSets.main.get().resources.srcDirs) {
// なんでも取り込む
include("**")
val tokenReplacementMap = mapOf(
// @キー@がバリューに置き換わるMap
)
filter<ReplaceTokens>("tokens" to tokenReplacementMap)
}
// プロジェクトのルートからLICENSEというファイルを取り込む
from(projectDir) { include("LICENSE") }
}
tasks.withType(JavaCompile::class.java).all {
// 特にWindowsではWindows-31J = CP932 = SJISがデフォルトで
// 使用されてしまうので負けないように指定しておく
this.options.encoding = "UTF-8"
}
repositories {
// ...
}
dependencies {
// ...
}
repositoriesブロック
gradleになっても、mavenレポジトリからアーティファクトを取ってくるというフローは変わっていない。そのため、repositoriesブロックでどのレポジトリを参照するか設定しておく。
指定例:
// セントラルレポジトリを参照する。
mavenCentral()
// JCenterのレポジトリを参照する。
jcenter()
// Googleのレポジトリを参照する。
google()
// 指定したURLのレポジトリを参照する。
maven {
url = java.net.URI("http://example.com/some-maven-repo/")
}
dependenciesブロック
一体全体どういうときに何が必要なのかを適当に指定する。
例えば、junitはテストする段階だけに必要で、製品に埋め込む必要はない。
なお、アーティファクトのIDの指定はグループID:アーティファクトID:バージョンによる。
指定例:
// 実行時、jarの実装に依存する
implementation("com.example:artifact:1.0.0")
// テスト時、jarの実装に依存する
testImplementation("com.example:artifact:1.0.0")
// 拡張子がjarで、プロジェクトのルートからの相対パスに存在するファイルをすべて取り込む
implementation(fileTree(mapOf("dir" to "your/path", "include" to arrayOf("*.jar"))))
あとがき
ドキュメントがあまり詳しくなかったので、適当にGitHubで検索して、目grep&頻度解析した。 IDEAさんにはASAPでビルドスクリプトの自動構成をしていただきたい限りだ。