読者です 読者をやめる 読者になる 読者になる

Chonaso's Commentary

InternetやIT技術などについて知ったこと、試したこと、考えたことを書いていきます。

mavenのローカルキャッシュがおかしくなっててハマった件

Java ハマり

こういうレベルでハマると運が悪いとずっとハマりそう、という話です。

あるプロジェクトのレビューをしようと環境を作っていたら、ビルドパスにあるはずなのにEclipse先生は「StringUtilsが見つからない」とコンパイルエラーになっていました。 mavenキャッシュ上のjarファイルを覗くとなぜか開けない状態になっていました。

f:id:chonaso:20141202124511p:plain

調査が面倒だったこともあり、あまり深く考えずにpom.xmlのcommons-langを別のバージョンにしたらうまくコンパイルが通ったので(ここでおかしいことに気付け、って話ですが)、Tomcatに乗せてみたらなんとTomcat自体が立ちあがらないという現象に遭遇してしまいました。

f:id:chonaso:20141202124535p:plain

情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:  (省略) [火 12 02 11:52:19 JST 2014]
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:entry' did not find a matching property. [火 12 02 11:52:19 JST 2014]
情報: Initializing ProtocolHandler ["http-nio-8080"] [火 12 02 11:52:19 JST 2014]
情報: Using a shared selector for servlet write/read [火 12 02 11:52:19 JST 2014]
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [火 12 02 11:52:19 JST 2014]
情報: Using a shared selector for servlet write/read [火 12 02 11:52:19 JST 2014]
情報: Initialization processed in 793 ms [火 12 02 11:52:19 JST 2014]
情報: サービス Catalina を起動します [火 12 02 11:52:19 JST 2014]
情報: Starting Servlet Engine: Apache Tomcat/8.0.12 [火 12 02 11:52:19 JST 2014]
情報: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [180] milliseconds. [火 12 02 11:52:20 JST 2014]
重大: A child container failed during start [火 12 02 11:52:20 JST 2014]
重大: A child container failed during start [火 12 02 11:52:20 JST 2014]
重大: The required Server component failed to start so Tomcat is unable to start. [火 12 02 11:52:20 JST 2014]
情報: Pausing ProtocolHandler ["http-nio-8080"] [火 12 02 11:52:20 JST 2014]
情報: Pausing ProtocolHandler ["ajp-nio-8009"] [火 12 02 11:52:20 JST 2014]
情報: サービス Catalina を停止します [火 12 02 11:52:20 JST 2014]
情報: Destroying ProtocolHandler ["http-nio-8080"] [火 12 02 11:52:20 JST 2014]
重大: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"] [火 12 02 11:52:20 JST 2014]
情報: Destroying ProtocolHandler ["ajp-nio-8009"] [火 12 02 11:52:20 JST 2014]
重大: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"] [火 12 02 11:52:20 JST 2014]

もちろんアンデプロイするとTomcatが起動します。

他のメンバーは普通に動いていて、一緒に色々と調べてくれたのですが決定打が見いだせない状況でした。

commons-langの件はともかくTomcatが起動しないのはなぁ、と思いながら色々調査しましたが、結局mavenリポジトリのローカルキャッシュがおかしくなっていたようで、repositoryフォルダ毎削除してやり直したらうまくいきました。 どうやら他のjarファイルもおかしかったようですね。

ちなみにcommons-langを問題のあった版と落としなおした版を比較したところ、前者のファイル末尾になにか余計なものがくっついていました。