0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Gradle】jarファイル内にクラスファイルが存在しなかった話

Posted at

事象

下記のようなbuild.gradleファイルを用いてビルドを行った際に、jarファイルが生成されるが、その中身にクラスファイルが存在していませんでした。

build.gradle
apply plugin: 'java'

group = 'com.test.foo'
version = '1.0.0'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

compileJava {
    options.encoding = 'UTF-8'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation('org.slf4j:slf4j-api:1.7.21')

    testCompile 'junit:junit:4.12'
    testCompile 'org.hamcrest:hamcrest-library:1.3'
}

原因と解決策

今回の事象の原因は、javaファイルが/src配下に存在していたことでした。

今回Javaプラグインを用いていますが、このプラグインはデフォルトのままですと/src/main/java配下のjavaファイルをビルドするようになっています。

そこで、javaファイルを/src/main/java 配下に移しビルドを行ったところ、無事にjarファイル内にクラスファイルが生成されていました。

今回もともとAntでビルドが行われていたプロジェクトをGradleでビルドするように変更するという背景もあり、ソースのディレクトリ構造をあまり意識していなかったので、Javaプラグインにこのような条件があったのを知りませんでした。

ちなみに、こちらにあるようにsourceSetsを用いることで、ビルド対象のディレクトリを設定することもできます。

今回は他のプロジェクトとの統一感を考えて/src/main/java配下にソースを移動するという方針を取りましたが、この方針もスマートだと思います。

まとめ

Gradleを用いて生成したjarファイル内にクラスファイルが存在しない場合は、ディレクトリ構成およびGradleのビルド対象のディレクトリがどうなっているかを確認してみてください。

Javaプラグインを用いている場合は、デフォルトで/src/main/java配下のjavaファイルをビルドするようになっていますので、ディレクトリ構成をこれに合わせるか、ビルドする際に参照するディレクトリを明示的に設定するようにしてください。

参考

Gradle公式ドキュメント

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?