Gradle 4.0 向けに以下の記事の更新版です。
試験的な提供なので将来が計画されていますが、Gradle 4.0 時点でどのようなになるかメモしておきます。
Build Init Plugin
Build Init Plugin を使うと Gradle build プロジェクトの作成をタイプに応じて自動でやってくれます。
タイプ | タイプ指定 |
---|---|
basic | $ gradle init |
java-application | $ gradle init --type java-application |
java-library | $ gradle init --type java-library |
groovy-application | $ gradle init --type groovy-application |
groovy-library | $ gradle init --type groovy-library |
scala-library | $ gradle init --type scala-library |
pom | $ gradle init --type pom |
basic
タイプ指定なしで basic
指定とみなされます。
$ gradle init
ディレクトリはこんな状態になります。
build.gradle は以下の内容で生成されます。
/* * This build file was generated by the Gradle 'init' task. * * This generated file contains a commented-out sample Java project to get you started. * For more details take a look at the Java Quickstart chapter in the Gradle * user guide available at https://docs.gradle.org/4.0.2/userguide/tutorial_java_projects.html */ /* // Apply the java plugin to add support for Java apply plugin: 'java' // In this section you declare where to find the dependencies of your project repositories { // Use 'jcenter' for resolving your dependencies. // You can declare any Maven/Ivy/file repository here. jcenter() } // In this section you declare the dependencies for your production and test code dependencies { // The production code uses the SLF4J logging API at compile time compile 'org.slf4j:slf4j-api:1.7.24' // Declare the dependency for your favourite test framework you want to use in your tests. // TestNG is also supported by the Gradle Test task. Just change the // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add // 'test.useTestNG()' to your build script. testCompile 'junit:junit:4.12' } */
java ライブラリプロジェクトの設定で、すべてコメントアウトされています。
ちなみに、repositories は jcenter()
がデフォルトですが、Gradle 4 からはGoogle の Maven リポジトリが以下のように簡単に追加できるようになっています。
repositories { google() }
java-application
Java アプリケーションの場合は java-application
を使います。
$ gradle init --type java-application
ディレクトリはこんな状態になります。
build.gradle は以下の内容で生成されます。
apply plugin: 'java' apply plugin: 'application' repositories { jcenter() } dependencies { compile 'com.google.guava:guava:21.0' testCompile 'junit:junit:4.12' } mainClassName = 'App'
java プラグインの依存関係定義は以下があります。
configuration名 | 説明 |
---|---|
compile | プロジェクトのプロダクトコードをコンパイルするのに必要な依存関係 |
compileOnly | プロジェクトのプロダクトコードをコンパイル時だけ必要な依存関係。runtime には含まれない |
runtime | プロダクトのクラスを実行するときに必要になる依存関係。デフォルトで、compileの依存関係もここに含まれる |
testCompile | プロジェクトのテストコードをコンパイルするのに必要な依存関係。デフォルトで、コンパイルされたプロダクトクラスと、コンパイル時の依存関係も含まれる |
testCompileOnly | プロジェクトのテストコードをコンパイル時だけ必要な依存関係 |
testRuntime | テストを実行するのに必要な依存関係。デフォルトで、compile、runtime、testCompileの各依存関係もここに含まれる |
テストフレームワークを変更したい場合は以下のように指定することもできます。
$ gradle init --type java-application --test-framework spock
java-library
Java ライブラリの場合は java-library
タイプを使います。
$ gradle init --type java-library
ディレクトリはこんな状態になります。
build.gradle は以下の内容で生成されます。
apply plugin: 'java-library' repositories { jcenter() } dependencies { api 'org.apache.commons:commons-math3:3.6.1' implementation 'com.google.guava:guava:21.0' testImplementation 'junit:junit:4.12' }
java-library プラグインの依存関係定義は以下があります。
configuration名 | 説明 |
---|---|
api | 外部(このライブラリの利用者)に公開する依存関係 |
implementation | 外部(このライブラリの利用者)に公開せず、ライブラリ内の実装でのみ使う依存関係 |
compileOnly | コンパイル時にのみ必要となる依存関係(実行時にリークしてはならないもの) |
runtimeOnly | コンパイル時には不要だが、実行時に必要な依存関係 |
testImplementation | テストをコンパイルするために使用される依存関係 |
testCompileOnly | テストコンパイル時にのみ必要となる依存関係(実行時にリークしてはならないもの) |
testRuntimeOnly | テストランタイムでのみ必要となる依存関係 |
ライブラリは、公開APIのパラメータで必要な型やアノテーションといった、公開APIを利用する上で必要となる依存を ABI (Application Binary Interface) と呼び、この api と内部実装である implementation を区別して依存定義するようになっています。
自動作成した後は、resources ディレクトリ作ってくれないので以下のようなタスク定義して
task initDirs {
sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}
resources ディレクトリ作成
$ ./gradlew initDirs
をしておくと良いかもしれません。
groovy-application
Groovy アプリケーションの場合は groovy-application タイプを使います。
$ gradle init --type groovy-application
ディレクトリはこんな状態になります。
build.gradle は以下の内容で生成されます。
apply plugin: 'groovy' apply plugin: 'application' repositories { jcenter() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.11' testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' } mainClassName = 'App'
java-application
とほとんど同じです。
テストライブラリはデフォルトで spock
になります。
groovy-library
Groovy ライブラリの場合は groovy-library タイプを使います。
$ gradle init --type groovy-library
ディレクトリはこんな状態になります。
build.gradle は以下の内容で生成されます。
apply plugin: 'groovy' repositories { jcenter() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.11' testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' }
ちなみに、コンパイル後のクラスファイルは build/classes/main
に一緒くたに入れられていましたが、Gradle 4 からは以下のようなレイアウトに変更になっています。
Java, `src/main/java` -> build/classes/java/main Groovy, `src/main/groovy` -> build/classes/groovy/main Scala, `src/main/scala` -> build/classes/scala/main
scala-library
Scala ライブラリの場合は scala-library タイプを使います。
$ gradle init --type scala-library
ディレクトリはこんな状態になります。
build.gradle は以下の内容で生成されます。
apply plugin: 'scala' repositories { jcenter() } dependencies { compile 'org.scala-lang:scala-library:2.11.8' testCompile 'junit:junit:4.12' testCompile 'org.scalatest:scalatest_2.11:3.0.1' testRuntime 'org.scala-lang.modules:scala-xml_2.11:1.0.6' }
java-application
のタイプは今のところ使えません。
pom
pom.xml があるディレクトリで以下のようにするとMaven プロジェクトを変換してくれます。
$ gradle init --type pom