- TL;DR
- プロジェクト作成
- コマンドライン引数でバージョン指定
- バージョンプロパティを指定する
- Jar アーカイブ名を直接指定する
- プロジェクト自体を変更する
- Base Plugin の archivesName を指定する
TL;DR
gradle init
タスクで作成したプロジェクトは、モジュールのプロジェクト名が lib や app となる。
Jar ファイル名は プロジェクト名を元に設定されるため、デフォルトでは lib.jar
や app.jar
のようなJarファイルが生成される。
これを変更するには、base.archivesName
プロパティを設定するか、プロジェクト名自体をリネームするのが良い。
プロジェクト作成
バージョン確認
$ gradle -v ------------------------------------------------------------ Gradle 8.1.1 ------------------------------------------------------------ Build time: 2023-04-21 12:31:26 UTC Revision: 1cf537a851c635c364a4214885f8b9798051175b Kotlin: 1.8.10 Groovy: 3.0.15 Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021 JVM: 17.0.7 (Homebrew 17.0.7+0) OS: Mac OS X 13.3.1 x86_64
プロジェクトを生成
$ mkdir example && cd example $ gradle init Starting a Gradle Daemon (subsequent builds will be faster) Select type of project to generate: 1: basic 2: application 3: library 4: Gradle plugin Enter selection (default: basic) [1..4] 3 Select implementation language: 1: C++ 2: Groovy 3: Java 4: Kotlin 5: Scala 6: Swift Enter selection (default: Java) [1..6] 3 Select build script DSL: 1: Groovy 2: Kotlin Enter selection (default: Groovy) [1..2] 2 Select test framework: 1: JUnit 4 2: TestNG 3: Spock 4: JUnit Jupiter Enter selection (default: JUnit Jupiter) [1..4] 4 Project name (default: example): Source package (default: example): Enter target version of Java (min. 7) (default: 17): 20 Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] > Task :init Get more help with your project: https://docs.gradle.org/8.1.1/samples/sample_building_java_libraries.html BUILD SUCCESSFUL in 37s 2 actionable tasks: 2 executed
ビルド
$ ./gradlew build
以下のようなJarが生成される。
$ ls lib/build/libs/ lib.jar $ jar tf lib/build/libs/lib.jar META-INF/ META-INF/MANIFEST.MF example/ example/Library.class
コマンドライン引数でバージョン指定
コマンドラインからプロパティとしてバージョンを指定することで、Jarのバージョン名を指定できる。
$ ./gradlew clean build -Pversion=0.1.0
以下のようなJarが生成される。
$ ls lib/build/libs/ lib-0.1.0.jar
バージョンプロパティを指定する
コマンドラインではなく、lib/build.gradle.kts
から指定することもできる。
version = "0.1.0"
以下のようなJarが生成される。
$ ./gradlew clean build $ ls lib/build/libs/ lib-0.1.0.jar
コマンドラインから -Pversion
で指定したものより lib/build.gradle.kts
に定義したものが優先となる。
Jar アーカイブ名を直接指定する
Jar タスクの archiveBaseName
プロパティで個別指定できる。
version = "0.1.0" tasks.withType<Jar>().configureEach { archiveBaseName.set("foo") }
以下のようなJarが生成される。
$ ls lib/build/libs/ foo-0.1.0.jar
以下のように、より細かく指定することもできる。
tasks.withType<Jar>().configureEach { archiveBaseName.set("foo") archiveAppendix.set("bar") archiveVersion.set("v1") archiveClassifier.set("plain") archiveExtension.set("jar") }
以下のようなJarが生成される。
$ ls lib/build/libs/ foo-bar-v1-plain.jar
Jar タスクのプロパティで名前を指定した場合、以下のように ソースJar や JavadocJar を生成しても、これらの名前には反映されない。 通常は以降に示す方法を使う。
java { withSourcesJar() withJavadocJar() }
プロジェクト自体を変更する
Java プラグインでは、Jarアーカイブ名のデフォルト値として project.name
が設定される。
ディレクトリ名を変更(Windows の場合は rename lib lib2
など)。
$ mv lib lib2
settings.gradle.kts
にも反映。
rootProject.name = "example" include("lib2")
以下のようなJarが生成される。
$ ./gradlew clean build $ ls lib2/build/libs/ lib2-0.1.0.jar
プロジェクト名を変えるのが公式の推奨だが、単一モジュールの場合は同じディレクトリ名のネストとなり、ちょっとヤダ。
Base Plugin の archivesName を指定する
プロジェクトのディレクトリ名を変えたくない場合は、Base Plugin の archivesName で指定できる。
この値はデフォルトで project.name
の値となっている。
Jar タスクなどの親である AbstractArchiveTask.getArchiveBaseName()
で使われるため、ソースJar や JavadocJar などの名前にも反映される。
settings.gradle.kts
で定義した名前を使う場合は以下のようにできる。
version = "0.1.0" base.archivesName.set(rootProject.name) java { withSourcesJar() withJavadocJar() }
以下のようなJarが生成される。
$ ls lib/build/libs/ example-0.1.0.jar example-0.1.0-javadoc.jar example-0.1.0-sources.jar