(私の2番目のGradleの問題...)
タスクの 1 つで Velocity への呼び出しを設定しようとしています。Velocity は log4j を直接呼び出しますが、Gradle はその log4j-over-slf4j-1.7.2.jar に迂回しているように見え、NoSuchMethodError が発生します。
ので、私は持っています:
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath 'org.apache.velocity:velocity:1.7'
// ... asumes provided:
classpath 'log4j:log4j:1.2.12'
}
}
そして、後で私が行うタスクで...
def template = Velocity.getTemplate('src\\jnlp\\jnlpTemplate.vm')
これにより例外が発生します。そして、スタックトレースの最後の部分は
Caused by: java.lang.NoSuchMethodError: org.apache.log4j.PatternLayout.<init>(Ljava/lang/String;)V
at org.apache.velocity.runtime.log.Log4JLogChute.initAppender(Log4JLogChute.java:117)
at org.apache.velocity.runtime.log.Log4JLogChute.init(Log4JLogChute.java:85)
at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:157)
at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:269)
at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:871)
at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:262)
at org.apache.velocity.runtime.RuntimeInstance.requireInitialization(RuntimeInstance.java:302)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1531)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:299)
at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:358)
at org.apache.velocity.app.Velocity$getTemplate.call(Unknown Source)
at build_49a099islbrnod06rkiudfavms$_run_closure1.doCall(C:\home\...\build.gradle:67)
これまでの私の分析は次のとおりです。
Velocity によって呼び出されるコンストラクター PatternLayout(String) は log4j の PatternLayout クラスの一部ですが、Gradle は最終的に PatternLayout を $GRADLE_HOME/lib/log4j-over-slf4j-1.7.2.jar のクラスに解決するようです。そして、そのjarのPatternLayoutは、要求されたコンストラクターが欠けている非常に最小限の実装のようです。
ここに回避策はありますか?私はいくつかの初心者の間違いを犯しましたか?