4

Gradle Tomcat プラグインの埋め込みコンテナー を使用してアプリを起動しようとすると、以下のスタック トレースが表示されます。

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':tomcatRun'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
...
Caused by: java.lang.ClassCircularityError: java/util/logging/LogRecord
    at net.bull.javamelody.LoggingHandler.publish(LoggingHandler.java:109)
    at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:183)
    at org.apache.juli.logging.DirectJDKLog.debug(DirectJDKLog.java:106)
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:369)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:341)
    at org.apache.catalina.startup.Tomcat$start.call(Unknown Source)
    at org.gradle.api.plugins.tomcat.embedded.BaseTomcatServerImpl.start(BaseTomcatServerImpl.groovy:37)
...

外部のTomcatを使用すると発生しないため、GradleのクラスパスとGradleの組み込みの依存関係と関係があると思われます(それらが何であるかを見つける方法さえ知りません)。私は少し調べてみましたが、私のプロジェクトではどちらも使用していない SLF4J や Logback に何らかの形で関連する同様の問題を抱えているようです。私はSLF4Jのレガシーブリッジでそれを回避しようとしましたが、役に立ちませんでしたbuild.gradle.

また、理論的には、JULI を無効にして、代わりに Tomcat を log4j にログ記録させることも可能であるように見えます。これにより、問題を解決できる可能性があるように見えますが、手順はすべて、 および の JAR を手動で置き換える必要が$CATALINA_HOME/binあり$CATALINA_HOME/lib、私はしません。 Gradleコンテキストでそれを実現する方法を最初に考えています。

何か案は?

4

1 に答える 1

3

最も簡単な解決策は、Tomcat の使用を停止しjava.util.logging、代わりに Log4J を使用することです。

私の中でbuild.gradle

  tomcat "org.apache.tomcat.embed:tomcat-embed-logging-log4j:${tomcatVersion}"
  // tomcat "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}"
于 2014-06-03T00:02:43.760 に答える