JavaとGradleでHello world


はじめに

何番煎じかわかりませんが、学習のためにJavaとGradleを使って「Hello world.」と表示するプログラムを作成してみました。

前提

  • Java version
    • 11
  • Gradle version
    • 6.5.1
  • OS
    • Windows 10

上記の環境で動作確認しています。ただし、ごく簡単なことしかしないため、多少のバージョンの違いは適宜読み替えれば問題ないはずです。

Gradleプロジェクトの作成

Gradleプロジェクトを作るためにまず適当なフォルダを作成します。

コマンドならば次のようになります。

mkdir hello-gradle
cd hello-gradle

ここではフォルダをhello-gradleという名前にしました。

次に、gradleコマンドでプロジェクトを作成します。
プロジェクトを作成したいフォルダをカレントディレクトリにして、(つまり、cd hello-gradleしてフォルダの中にいる状態で)次のコマンドを実行します。

gradle init --type java-application

するといくつか質問をされます。

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2]

ビルドの設定を行うスクリプトをGroovyかKotlinのどちらで記述するか選択します。Javaプロジェクトの場合は普通Groovyを使うと思われるので、「1」を入力してEnterします。

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter

次にテストフレームワークを選択します。今回はHello worldするだけなので、テストは何でもよいのですが、とりあえず「4」を入力してEnterします。

Project name (default: hello-gradle):
Source package (default: hello.gradle):

最後に「Project name」と「Source package」をそれぞれ聞かれます。ここではデフォルトで進めることとし、何も入力せずEnterします。

これでhello-gradleフォルダの中に各種ファイルが生成されるはずです。

「Hello world.」するために必要なソースコードはすでにすべて出来上がっています。

今回もっとも重要な「Hello world.」を標準出力するメインメソッドはsrc/main/java/hello/gradle/App.javaにあります。

なお、最初にgradle init --type java-applicationしましたが、--typeの指定無しでgradle initだけでもいくつか質問事項が増えるだけで同じ結果になるはずです。

ただ、Javaのコマンドラインアプリケーションを作成するなら--type java-applicationを指定したほうが速いです。

--typeに指定できるタイプはSupported Gradle build typesに記載されています。たとえば、kotlin-applicationを指定するとKotlinのプロジェクトができるようです。

動作確認

hello-gradleフォルダにおいて、コマンドプロンプトなら、

gradlew.bat run

のコマンドを実行します。するとHello world.の文字列が出力されているはずです。これでJava + GradleによるHello worldは完了です。

テストを実行

Hello worldを標準出力するだけのプログラムなのでテストをしても意味がないですが、せっかくテストコードが用意されているのでテストも実行してみます。

動作確認時と同じように、コマンドプロンプトなら、

gradlew.bat test

を実行します。

すると、テストは成功し、BUILD SUCCESSFULと表示されます。

なお、テストコードはsrc/test/java/hello/gradle/AppTest.javaにあります。

このクラスのappHasAGreetingメソッドがテストメソッドです。

このテストはメインメソッドのあるAppクラスのgetGreetingメソッドがnullを返さない、ということを検証しているだけです。このメソッドはHello world.という文字列を返しているので当然テストはパスします。

このgetGreetingメソッドをたとえば、

package hello.gradle;

public class App {
    public String getGreeting() {
        // return "Hello world.";
        return null;
    }

    public static void main(String[] args) {
        System.out.println(new App().getGreeting());
    }
}

のようにnullを返すように変更してテストを実行すると、今度はテストが失敗し、> Task :test FAILEDという文言と失敗したテストメソッドが表示されます。