kyukyunyorituryo / AozoraEpub3

青空文庫テキスト→ePub3変換
http://www18.atwiki.jp/hmdev/
Other
145 stars 14 forks source link

警告メッセージ: SLF4J No SLF4J providers were found. #16

Closed happynow closed 8 months ago

happynow commented 9 months ago

コマンドラインにてAozoraEpub3を実行すると、下記のようなSLF4J関連の警告メッセージが表示されてしまいます。 バージョン 1.1.1b19Q から発生している事象です。ビルドツールを gradle に変えた影響だと思います。

C:\>cd C:\AozoraEpub3-1.1.1b19Q

C:\AozoraEpub3-1.1.1b19Q>java -cp AozoraEpub3.jar AozoraEpub3 -enc UTF-8 "C:\Works\入力テキスト.txt"
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
--------
Detected encoding = UTF-8
変換開始 : C:\Works\入力テキスト.txt
変換完了[0.2s] : C:\Works\[著者] 本タイトル.epub

C:\AozoraEpub3-1.1.1b19Q>
happynow commented 9 months ago

build.gradle を下記のように修正したら直るかもしれません。 org.slf4j の依存先が slf4j-api となっているところを slf4j-simple に修正します。 これで gradle build コマンドでビルドしたファイルを実行したところ、私の環境では警告が出なくなりました。

dependencies {
    ...
-    implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.7'
+    implementation group: 'org.slf4j', name: 'slf4j-simple', version: '2.0.7'
    testImplementation group: 'org.slf4j', name: 'slf4j-simple', version: '2.0.7'
    ...
}

この解決方法は stackoverflow の下記のページを参考にしました。 How to solve "No SLF4J providers were found" when the "slf4j-api" and "slf4j-simple" are already imported? https://stackoverflow.com/questions/68105088/#answer-68105131

蛇足

build.gradle では archiveFileName でJarファイル名が指定できます。

jar {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    archiveFileName = 'AozoraEpub3.jar' /* JARファイル名を指定 */

    manifest {
        attributes 'Main-Class': 'AozoraEpub3Applet'
    }

    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

P.S. 一気に数多くの issue報告すいません。後、2,3あります。本家のほうにも挙げるつもりです。

kyukyunyorituryo commented 9 months ago

修正のついでにライブラリの更新もしました https://github.com/kyukyunyorituryo/AozoraEpub3/commit/1045474c437a17eb291e704b4a954c5d7b2f5f9d

happynow commented 9 months ago

gradle build でコンパイルした実行ファイルで確認したところ、警告メッセージは出なくなりました。 対応ありがとうございました。 ただ、リリース版のビルド手順が分かりませんので、このissueについてはリリース版で改めて確認させて頂きます。

kyukyunyorituryo commented 9 months ago

GitHub ActionsでJavaプロジェクトをビルドしています。 https://github.com/kyukyunyorituryo/AozoraEpub3/blob/master/.github/workflows/nightly.yml

参考 https://zenn.dev/kengo_toda/books/a0bd40668b2824cb6772/viewer/7

happynow commented 9 months ago

ご教示ありがとうございます。 https://github.com/kyukyunyorituryo/AozoraEpub3/actions/runs/7854128553 からダウンロードしたビルドファイルで確認しました。警告メッセージは出ませんでした。 クローズさせて頂きます。

happynow commented 9 months ago

前回、確認漏れがありました。これから対応される予定だったかもしれませんが

kyukyunyorituryo commented 9 months ago

私はgradleを使っているのでlibフォルダの中身はからでもいいけれど、antを使っているなら更新しないといけない。 gradleからantを呼び出してant.xmlはファイルのコピーにしか使っていない。 eclipseのクラスパス設定では、libフォルダー内を指定してあるかもしれない。

参考 GradleプロジェクトをEclipseにインポート https://camp.trainocate.co.jp/magazine/spring-started-guide-gradle-eclipse/

kyukyunyorituryo commented 9 months ago

libフォルダー内のjarファイルを使わないように設定を変えました。jarファイルはgradleから読み込まれます。 https://github.com/kyukyunyorituryo/AozoraEpub3/commit/3fa29d77a35c147e732a1108928efdbb6ae7fcee

https://stackoverflow.com/questions/73358490/generate-eclipse-launch-configurations-with-gradle

Eclipseで右クリックしてGradle→Refresh Gradle Project その後 実行の構成でいままの構成ファイルを削除してから新たに作り直すとgradleのライブラリが自動で使えるようになる。

happynow commented 9 months ago

いろいろご教示有難うございます。私も自分でもう少し調べてみます。 たしかに、手作業で jarやクラスパスを整備してたら、何のために gradle 使ってるか分かりませんよね

happynow commented 8 months ago

度々、すいません。 次のファイルにも古いライブラリの記述がありました。 https://github.com/kyukyunyorituryo/AozoraEpub3/blob/f1b80b3feaf5cce3ed2de20aed9f5d011e50c7b5/src/META-INF/MANIFEST.MF#L1-L4

これは修正するよりも src/META-INF フォルダごと削除しても良いと思います。

kyukyunyorituryo commented 8 months ago

META-INFの削除しました https://github.com/kyukyunyorituryo/AozoraEpub3/commit/9955975241548a14e273ba00e0aa188fa7860040

happynow commented 8 months ago

早々のご対応ありがとうございました。