Help us understand the problem. What is going on with this article?

gradle initもEclipseも使わずJavaプロジェクトを作成する

More than 3 years have passed since last update.

GradleでJavaプロジェクトを新しく作ろうと思ったとき、「Gradle Java プロジェクト作成」でググると、どうにもEclipseを使ったり、 init --java-library を使ったりと、必要最低限以上のものがくっついてくる方法ばかり出てくるので、Gradleの理解のためにもユーザーガイドを見ながら必要最小限のJavaプロジェクトの作り方を調べてみました。

たぶん仕事等でこの通りやることは少ないと思いますが、どこまでがGradleのお作法でどこからが便利部分なのかを理解するのにはちょうど良いかと思います。

ちなみに、この記事の内容はほぼユーザーガイドの Chapter 45. The Java Plugin の要約です。

前提

作成するのはコンソール上で動作する一番基本的なJavaアプリケーションです。
public static void main(String args[]) を含んだクラスから始まり、なんだかんだやってCUI上で完結するようなプログラムです。
クローラーによるデータ作成とか、DBのバッチ処理とか、そんな感じで使ったりする感じですね。
(JARで固めたライブラリを作りたい、という場合も手順は同じです。)

環境

  • Gradle 3.0
  • Mac OS X
  • Java8

build.gradleの作成

適当なディレクトリ(新しく作成するプロジェクトのホームディレクトリ)に build.gradle を作成します。
build.gradle はGradleでプロジェクトを管理しようと思ったら必須のビルドスクリプトファイルです。

$ vi build.gradle
build.gradle
apply plugin: 'java'

はい、これだけです。
これだけあればGradleはこのディレクトリ以下にあるファイルたちがJavaアプリケーションであることを認識してくれます。

ディレクトリの作成

Gradleは、プロジェクトがJavaアプリケーションであることを認識すると、ビルド時に所定のディレクトリをソースファイルやリソースファイルとしてクラスパスに追加します。

所定のディレクトリ、とは 45.4. Project layout に書いてある通りですので、この通りにディレクトリを作成します。

$ mkdir src{,/main{,/java,/resources},/test{,/java,/resources}}

$ tree
.
├── build.gradle
└── src
    ├── main
    │   ├── java
    │   └── resources
    └── test
        ├── java
        └── resources

※ sourceSet部分は、プロジェクトの事情によって追加する部分ですので省略しました。

main にはプログラム本体を、 test にはテストコードを置きます。
また、 resources は入力データファイルや設定ファイルなどを置く場所です。

一旦ビルドしてみる

ここまで出来たら gradle build で一旦ビルドできるか確認してみます。

$ gradle build
Starting a Gradle Daemon, 1 stopped Daemon could not be reused, use --status for details
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build

BUILD SUCCESSFUL

Total time: 6.158 secs

実際はgradleコマンドを実行する際のタスク(上記ではbuild)はかなり細分化されていて、細かい単位で指定することができますが、ひとまずはテストとコンパイル、JARの作成などの一連の作業をしてくれる build を使っておくと良さそうです。

ビルドが成功すると、以下のように build ディレクトリが生成され、中にソースコードを固めたJARファイルが作成されました。(まだ1クラスも書いていないので中身は空ですが。。。)

$ tree
.
├── build
│   ├── libs
│   │   └── gradle_test.jar
│   └── tmp
│       └── jar
│           └── MANIFEST.MF
├── build.gradle
└── src
    ├── main
    │   ├── java
    │   └── resources
    └── test
        ├── java
        └── resources

11 directories, 3 files

まとめ

これで最小限のJavaプロジェクトが完成し、Javaプログラムを書き始める準備が整いました。
あとは、外部ライブラリが必要であれば build.gradle に dependencies を書いたり、Eclipseで開発したければEclipseプラグインを追加したり、細かいビルドのロジックが必要であれば自分でタスクを書いたりしていくことになります。

実際にはプロダクトによって様々なディレクトリが必要になるかもしれませんが、基本形はここに紹介した通りになります。

おまけ:GradleWrapperを用意する

作成したプロジェクトをチームのメンバーと共有する場合は GradleWrapper を用意します。
GradleWrapperがあれば、チーム間で同じバージョンのGradleをインストールする等の環境構築が不要になります。

$ gradle wrapper
Starting a Gradle Daemon (subsequent builds will be faster)
:wrapper

BUILD SUCCESSFUL

Total time: 7.223 secs

$ ls -l
total 32
-rw-r--r--  1 chooyan_eng  wheel   355  9  6 01:26 build.gradle
drwxr-xr-x  3 chooyan_eng  wheel   102  9  6 08:51 gradle
-rwxr-xr-x  1 chooyan_eng  wheel  5242  9  6 08:51 gradlew
-rw-r--r--  1 chooyan_eng  wheel  2260  9  6 08:52 gradlew.bat
drwxr-xr-x  4 chooyan_eng  wheel   136  9  6 01:36 src

gradlew は実行ファイルになっていますので、Gradleがインストールされていない環境でも、 gradlew コマンドによってgradleと全く同じことができる、というのが便利なポイントです。

The gradlew command can be used exactly the same way as the gradle command.

ぜひ作成してソース管理に追加しましょう。

chooyan_eng
フリーランスでアプリ開発や講師をやってます。Flutter, ネイティブでの iOSアプリ開発、Androidアプリ開発が最近のメインです。 https://zenn.dev/chooyan の方でも Flutter の仕組みを調べて説明する記事を書いています。開発、研修のお仕事はご相談ください。
https://tsuyoshichujo.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away