クラスパスと依存ライブラリの確認
-d
オプション付きでビルドを行い、
$ ./gradlew clean $ ./gradlew -d build
NormalizingJavaCompiler
のログでコンパイラ引数の内容を確認できる。
... [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -source 21 -target 21 -d .../app/build/classes/java\main -h .../app/build/generated/sources/headers/java/main -g -sourcepath .../app/src/main/java -proc:none -s .../app/build/generated/sources/annotationProcessor/java/main -classpath ... --module-path ...
-classpath
の内容がクラスパスとして渡されるもので、--module-path
の内容がモジュールパスとして渡されるもの(module-info.java
や MANIFEST
の Automatic-Module-Name
エントリを扱わない場合は -classpath
のみが使われる)。
同様に application
プラグインにより、ランタイムの場合は、
$ ./gradlew -d run
DefaultExecHandle
のログでランタイム時の引数内容を確認できる。
... [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'command '...bin/java.exe''. Working directory: .../app Command: .../java.exe -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp ... com.example.hello.App
application
プラグインの run
で実行した場合、モジュラーアプリケーションでも、モジュールパス--module-path
(-p
) ではなく、クラスパス -cp
が使われる(Gradle8.5時点)。
クラスパス内容の表示
以下のようなタスクを作成すれば、Gradle内部のクラスパスの内容を確認できる。
tasks.register<DefaultTask>("printPath") { println("-- compileClasspath") sourceSets["main"].compileClasspath.forEach(::println) println("-- annotationProcessorPath") sourceSets["main"].annotationProcessorPath.forEach(::println) println("-- runtimeClasspath") sourceSets["main"].runtimeClasspath.forEach(::println) }
クラスパスに含まれる実態ファイルが表示できる。
$ ./gradlew printPath -- compileClasspath .../.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.14.0/1ed471194b02f2c6cb734a0cd6f6f107c673afae/commons-lang3-3.14.0.jar .../.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-math3/3.6.1/e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf/commons-math3-3.6.1.jar -- annotationProcessorPath -- runtimeClasspath .../app/build/classes/java/main ../app/build/resources/main .../.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.14.0/1ed471194b02f2c6cb734a0cd6f6f107c673afae/commons-lang3-3.14.0.jar .../.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-math3/3.6.1/e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf/commons-math3-3.6.1.jar
なお、Gradle8.5 時点では、モジュールパスはそれ自体でモデル化されておらず、それぞれのタスク実行時に JavaModuleDetector.java によりアドホックに判断される。
なので、実際にクラスパスかモジュールパスのどちらで扱われているかを判断するには、前述のデバッグログに頼るしかない。
依存ライブラリの確認
単にライブラリの依存定義だけ確認するには、以下のようなレイアウトの場合、
root ├ src ├ build.gradle.kts └ setting.gradle.kts
以下で表示できる。
$ ./gradlew dependencies
以下のレイアウトの場合、
root ├ app │ ├ src │ └ build.gradle.kts └ setting.gradle.kts
以下で表示できる。
$ ./gradlew app:dependencies
> Task :app:dependencies ------------------------------------------------------------ Project ':app' ------------------------------------------------------------ annotationProcessor - Annotation processors and their dependencies for source set 'main'. No dependencies compileClasspath - Compile classpath for source set 'main'. +--- org.apache.commons:commons-lang3:3.14.0 \--- org.apache.commons:commons-math3:3.6.1 compileOnly - Compile-only dependencies for the 'main' feature. (n) No dependencies ... 略 (n) - A dependency or dependency configuration that cannot be resolved.
特定の configuration
に絞る場合は以下のように指定する。
$ ./gradlew app:dependencies --configuration implementation