プロジェクト

全般

プロフィール

Gradle init

JDKとGradleにPATHを通した状態で gradle init を実行します。
対話的にいくつかの設定を指示すると、プロジェクトのディレクトリ・ファイルが生成されます。

以下はGradle 8.11で実行したときの例です。

サンプル1 単一のアプリケーションモジュール

mainメソッドを持ち、実行可能なJavaアプリケーションのモジュール1つからなるGradleプロジェクトを生成します。
ここでいうGradleのモジュールは、成果物(JARファイル)を生成する単位となります。

hello % gradle init

Select type of project to generate:
  1: Application
  2: Library
  3: Gradle plugin
  4: Basic (build structure only)
Enter selection (default: Application) [1..4] 1             <--- Java実行可能プロジェクト

Select implementation language:
  1: Java
  2: Kotlin
  3: Groovy
  4: Scala
  5: C++
  6: Swift
Enter selection (default: Java) [1..6] 1              <--- Java

Enter target Java version (min: 7, default: 21):      <--- 使用するJDKバージョンを指定

Project name (default: hello): 

Select application structure:
  1: Single application project
  2: Application and library project
Enter selection (default: Single application project) [1..2] 1 <--- 単一モジュール

Select build script DSL:
  1: Kotlin
  2: Groovy
Enter selection (default: Kotlin) [1..2] 1            <--- build.gradleの記述はKotlinで

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 4           <--- JUnit5 を使う

Generate build using new APIs and behavior (some features may change in the next
 minor release)? (default: no) [yes, no] no           <--- 新しいAPI(将来変更の可能性あり)を使うビルド設定を生成する

> Task :init
Learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.11.1/samples/sample_building_java_applications.html

BUILD SUCCESSFUL in 3m 30s
1 actionable tasks: 1 executed
hello % 

Gradleのinitタスクを実行すると、対話的にプロジェクトの種類や設定を入力し、それに従ったプロジェクトディレクトリ・ファイルが生成されます。このディレクトリ構造は次となります。

hello % tree -a
.
├── .gitattributes
├── .gitignore
├── app
│   ├── build.gradle.kts
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── example
│       │   │           └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── org
│           │       └── example
│           │           └── AppTest.java
│           └── resources
├── gradle
│   ├── libs.versions.toml
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts

build.gradle.kts

ビルドの定義はbuild.gradle.ktsファイルに記述します。initタスク(プロジェクト種類:application、言語:Java)で生成されたbuild.gradle.ktsの内容(コメント行を除く)は次です。

plugins {
    application
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(libs.junit.jupiter)
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
    implementation(libs.guava)
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

application {
    mainClass = "org.example.App" 
}

tasks.named<Test>("test") {
    useJUnitPlatform()
}

dependenciesのライブラリ定義

Ver.8.6以降では、JUnitのAPIとGuavaのAPIのライブラリが、これまでと違う表記で定義されています。

    testImplementation(libs.junit.jupiter)
    implementation(libs.guava)

この定義は、gradleディレクトリにある libs.versions.toml ファイルに記述されています。

# This file was generated by the Gradle 'init' task.
# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format

[versions]
guava = "33.2.1-jre" 
junit-jupiter = "5.10.3" 

[libraries]
guava = { module = "com.google.guava:guava", version.ref = "guava" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }

サブプロジェクトを跨って、依存ライブラリを一元的に定義することができます。

App.java

initタスクでは、指定したパッケージにmainメソッドを持つ雛形クラスのソースファイルが1つ生成されます。

  • app/src/main/java/org/example/App.java
    package org.example;
    
    public class App {
        public String getGreeting() {
            return "Hello world!";
        }
    
        public static void main(String[] args) {
            System.out.println(new App().getGreeting());
        }
    }
    

.gitignore

gitリポジトリに登録しないgradleプロジェクトのディレクトリを設定したgit無視ファイルが生成されます。

  • .gitignore
    .gradle
    build
    

.gitattributes

gitリポジトリに登録する際のファイル属性を設定したgit属性ファイルが生成されます。

  • .gitattributes
    /gradlew   text eol=lf
    *.bat      text eol=crlf
    *.jar      binary
    

サンプル2 複数モジュールのプロジェクト

mainメソッドを持ち、実行可能なJavaアプリケーションのモジュールと、アプリケーションから利用されるライブラリモジュールからなるGradleプロジェクトを生成します。

hello % gradle init

Select type of build to generate:
  1: Application
  2: Library
  3: Gradle plugin
  4: Basic (build structure only)
Enter selection (default: Application) [1..4] 1

Select implementation language:
  1: Java
  2: Kotlin
  3: Groovy
  4: Scala
  5: C++
  6: Swift
Enter selection (default: Java) [1..6] 1

Enter target Java version (min: 7, default: 21): 

Project name (default: hello): 

Select application structure:
  1: Single application project
  2: Application and library project
Enter selection (default: Single application project) [1..2] 2

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

Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] 

> Task :init
Learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.11.1/samples/sample_building_java_applications_multi_project.html

BUILD SUCCESSFUL in 29s
1 actionable task: 1 executed
hello % 

生成されたディレクトリは次です。

├── .gitattributes
├── .gitignore
├── app
│   ├── build.gradle.kts
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── example
│       │   │           └── app
│       │   │               ├── App.java
│       │   │               └── MessageUtils.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── org
│           │       └── example
│           │           └── app
│           │               └── MessageUtilsTest.java
│           └── resources
├── buildSrc
│   ├── build.gradle.kts
│   ├── settings.gradle.kts
│   └── src
│       └── main
│           └── kotlin
│               ├── buildlogic.java-application-conventions.gradle.kts
│               ├── buildlogic.java-common-conventions.gradle.kts
│               └── buildlogic.java-library-conventions.gradle.kts
├── gradle
│   ├── libs.versions.toml
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── list
│   ├── build.gradle.kts
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── example
│       │   │           └── list
│       │   │               └── LinkedList.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── org
│           │       └── example
│           │           └── list
│           │               └── LinkedListTest.java
│           └── resources
├── settings.gradle.kts
└── utilities
    ├── build.gradle.kts
    └── src
        ├── main
        │   ├── java
        │   │   └── org
        │   │       └── example
        │   │           └── utilities
        │   │               ├── JoinUtils.java
        │   │               ├── SplitUtils.java
        │   │               └── StringUtils.java
        │   └── resources
        └── test
            └── resources

サンプルとして生成されるモジュールは、app、list、utilitiesの3つです。


3ヶ月前に更新