1
0

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ファイルを実行するとjava.lang.ClassNotFoundExceptionエラー

Last updated at Posted at 2020-12-19

事象

ビルド時は問題ないがjarファイルにして起動すると実行時にClassNotFoundExceptionエラーが発生。
ただし、エラーが発生しない画面もある
inteliJからlocalで起動している場合は、エラー発生なし

環境

ビルドツール: Gradle(6.7.1)
言語: Kotlin(1.3.72)

再現手順

jarを生成した後、起動

terminal
java -jar awba-manage-0.0.1-SNAPSHOT.jar

その後、画面を動作させてみると一部ページでエラーが発生。
ログをみる

ログ
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/lang3/RandomStringUtils] with root cause

java.lang.ClassNotFoundException: org.apache.commons.lang3.RandomStringUtils
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471) ~[na:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[na:na]
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:92) ~[awba-manage-0.0.1-SNAPSHOT.jar:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
	at com.awba.manage.awbamanage.service.EmailSenderService.sendForgotPasswdMail(EmailSenderService.kt:83) ~[classes!/:na]
	at com.awba.manage.awbamanage.controller.LoginController.forgotPasswdSendMail(LoginController.kt:95) ~[classes!/:na]
	at com.awba.manage.awbamanage.controller.LoginController$$FastClassBySpringCGLIB$$accc0aa.invoke(<generated>) ~[classes!/:na]

調査開始

RandomStringUtilsというクラスが見つからないというのでエラーが出ている。
jarファイルの中身を確認すると確かに該当のjar(commons-lang3:3.5.jar)がない

jarファイルの中身を確認
jar -tf awba-manage-0.0.1-SNAPSHOT.jar 

とりあえず以下手順を実施し、一度きれいにして再度buildして起動したが変わらず。。

terminal
gradle clean

# cacheディレクトリも削除↓
# %ユーザのホームフォルダ%\.gradle\caches

build.gradleをみると・・・

build.gradle.kts
compileOnly("org.apache.commons:commons-lang3:3.11")

原因

build.gradleで該当のライブラリの宣言部分をcompileOnlyにしていたため。
compileの時にのみ必要なライブラリとなり、jarファイルには含まれない。

対応

implementationで宣言する

build.gradle.kts
implementation("org.apache.commons:commons-lang3:3.11")
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?