2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ことりんと一緒 - 2. Gradle プロジェクト

Last updated at Posted at 2017-12-12

説明

1. Hello, World! で、Kotlin を使って Hello, World! を動かしてみました。
その時は、Kotlin ファイルに直接記述し、kotlinc でコンパイルして実行しました。
しかし実際には、Kotlin のプロジェクトを作ってビルドをするには Gradle や Maven といったビルドツールを使用すると思います。
そこで、Gradle を用いた Kotlin のビルドを行ってみます。

前提

次の環境で作業しています。

項目 内容
OS MacOS
Homebrew が使えること
JDK 1.8.0_152
Gradle 4.3.1

手順

1. プロジェクトテンプレートの作成

1.1. gradle init

gradle init を実行すると gradle プロジェクトの雛形を作成する事ができます。
オプションをつけずにそのまま実施するとソースフォルダなどは作られず、build.gradle ファイルや、gradle/gradlew などが作成されます。
また、いくつかのオプションがあるので、それらを選択する事で目的にあった雛形を作成する事ができます。
オプションの一覧はヘルプコマンドで確認する事ができます。

$ gradle help --task init

> Task :help
Detailed task information for init

Path
     :init

Type
     InitBuild (org.gradle.buildinit.tasks.InitBuild)

Options
     --type     Set type of build to create.
                Available values are:
                     basic
                     groovy-application
                     groovy-library
                     java-application
                     java-library
                     pom
                     scala-library

     --test-framework     Set alternative test framework to be used.
                          Available values are:
                               spock
                               testng

Description
     Initializes a new Gradle build.

Group
     Build Setup
1.1.1. 指定タイプ一覧
タイプ 内容
basic タイプ指定なしと同様、build.gradleはコメントアウト
java-application Javaアプリケーション用途
java-library Javaライブラリ用途
groovy-application Groovyアプリケーション用途
groovy-library Groovyライブラリ用途
scala-library Scalaライブラリ用途
pom Mavenプロジェクトからの変換
1.1.2. java-application build.gradle内容
// Apply the java plugin to add support for Java
apply plugin: 'java'

// Apply the application plugin to add support for building an application
apply plugin: 'application'

// 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()
}

dependencies {
    // This dependency is found on compile classpath of this component and consumers.
    compile 'com.google.guava:guava:23.0'

    // Use JUnit test framework
    testCompile 'junit:junit:4.12'
}

// Define the main class for the application
mainClassName = 'App'
1.1.3. java-library build.gradle内容
// Apply the java-library plugin to add support for Java Library
apply plugin: 'java-library'

// 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()
}

dependencies {
    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:23.0'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}
1.1.4. groovy-application build.gradle内容
// Apply the groovy plugin to add support for Groovy
apply plugin: 'groovy'

// Apply the application plugin to add support for building an application
apply plugin: 'application'

// 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()
}

dependencies {
    // Use the latest Groovy version for building this library
    compile 'org.codehaus.groovy:groovy-all:2.4.12'

    // Use the awesome Spock testing and specification framework
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
}

// Define the main class for the application
mainClassName = 'App'
1.1.5. groovy-library build.gradle内容
// Apply the groovy plugin to add support for Groovy
apply plugin: 'groovy'

// 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()
}

dependencies {
    // Use the latest Groovy version for building this library
    compile 'org.codehaus.groovy:groovy-all:2.4.12'

    // Use the awesome Spock testing and specification framework
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
}
1.1.6. scala-library build.gradle内容
// Apply the scala plugin to add support for Scala
apply plugin: 'scala'

// 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()
}

dependencies {
    // Use Scala 2.11 in our library project
    compile 'org.scala-lang:scala-library:2.11.8'

    // Use Scalatest for testing our library
    testCompile 'junit:junit:4.12'
    testCompile 'org.scalatest:scalatest_2.11:3.0.4'

    // Need scala-xml at test runtime
    testRuntime 'org.scala-lang.modules:scala-xml_2.11:1.0.6'
}

1.2. java-application として作成

デフォルトでは kotlin 用の雛形を作成するためのタイプ指定がありません。そこで、java-application として雛形を作成し、カスタマイズを行います。

1.2.1. gradle init 実行

以下のコマンドを実行します。

$ gradle init --type java-application

2. プロジェクトテンプレートのカスタマイズ

2.1. build.gradle のカスタマイズ

作成されている build.gradle は Java アプリケーション用なので、Kotlin 用にカスタマイズを行います。

以下の内容に、build.gradle を修正します。

buildscript {
    ext.kotlin_version = '1.2.0'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

2.2. プロジェクト構成のカスタマイズ

java 用に作成されたソースディレクトリはありますが、kotlin 用のソースディレクトリがないので、以下のように追加します。
java ディレクトリの並びにkotlinディレクトリを作成します。

sample-2017-12-12 08-46-55.png

以上で、Gradle プロジェクトの準備は完了です。
Kotlin のソースを追加してみます。

3. Kotlin ソースの追加と実行

3.1. Kotlin ソースコードの追加

以下で作成した Hello, World! を出力するソースを src/main/kotlin 配下にコピーします。

1. Hello, World!

3.2. application プラグインの追加

Gradle の application プラグインを使用すると、Gradle のタスクに run が追加されます。これを用いる事で Gradle からアプリケーションを実行できるようになります。

以下の2行を build.gradle に追加ですることで application プラグインを使用できるようになります。

apply plugin:'application'
mainClassName = "main関数を定義しているクラス名"

追加した Kotlin ファイルは HelloKotlin.kt でした。このファイルをコンパイルして生成されるクラスファイルは、末尾に Kt をつけた HelloKotlinKt となります。

そのため、今回は次の2行をbuild.gradle に追加を行います。

apply plugin:'application'
mainClassName = "HelloKotlinKt"

3.3. ビルド

gradle を使ってビルドを行います。build.gradle ファイルが置かれているディレクトリで次のコマンドを実行します。

$ gradle build

生成された Jar ファイルを確認してみます。Gradle では、build/libs ディレクトリのは以下に出力されます。

$ ls -l build/libs/
total 1888
-rw-r--r--  1 shinyay  staff  962905 12 12 13:30 sample-1.0-SNAPSHOT.jar

sample という名前がついています。これは、最初に gradle init を実行したディレクトリ名から設定されています。この設定は、settings.gradle の修正で変更が行なえます。

settings.gradle は次のように記述されています。ここで定義されている rootProject.name を変更することで 名前を変更することができます。

rootProject.name = 'sample'

3.4. 実行

最後に Gradle からアプリケーションを実行してみます。
次のコマンドにより実行が行なえます。

$ gradle run

実行結果は次のように表示されます。

$ gradle run

> Task :run
Hello, Kotlin!

まとめ

Kotlin も Java 同様に Gradle や Maven 利用したビルド環境を用意した方が作業効率があがる事がわかります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?