文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

icu4j2.6.1のLocaleElements_zh__PINYIN.classの罠

最近gradleを触りだして、自動で依存管理をしていたのですが、
先日以下のようなエラーが出て、どうしてもエラーが消えない現象がありました。

SEVERE: Unable to process Jar entry [com/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class] from Jar [jar:file:/Users/tree/.gradle/caches/artifacts-15/filestore/com.ibm.icu/icu4j/2.6.1/jar/ec0b2437fa48825d7b046efafbe8d27343fe97b2/icu4j-2.6.1.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60
	at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:133)
	at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:60)
	at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209)
	at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2105)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1981)
	at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1947)
	at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1932)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1326)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5179)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
	at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657)
	at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)

なんの事かさっぱり解らなかったんですが、どうもicu4j内の中国語をごにょごにょするクラスが存在しない、
というか構成がおかしいのが原因だそうで、2.8でfixしたそうです。
しかしgradleで最新の51.1に差し替えてもずっとエラーが出るのですが、
結局gradleのローカルファイルを削除したらエラーがでなくなりました。

localhost:icu4j tree$ pwd
/Users/tree/.gradle/caches/artifacts-15/filestore/com.ibm.icu/icu4j
localhost:icu4j tree$ ll
total 0
drwxr-xr-x  3 tree  staff   102B  5 10 01:43 2.6.1
localhost:icu4j tree$ rm -rf *

削除後に Gradle -> Refresh All で最新版に差し替えて、ようやくエラーがでなくなりました。

Gradleの事全然解ってませんが、参照されていないであろう2.6.1のフォルダが存在するだけでNGなんですね。
Mavenだとまた違った挙動になるのだろうか。

Gradle Effective Implementation Guide

Gradle Effective Implementation Guide


Building and Testing With Gradle

Building and Testing With Gradle