とりあえず使ってたmaven-download-plugin
が1.2.0
と古かったので、1.4.0
にバージョンアップしたら直った。
詳細な発生条件や原因はちゃんと調べられていないが、覚書としてメモしておく。
[前提条件]
とあるMavenプロジェクトで、テスト用にDynamoDB Localをダウンロードして利用するようにしていた。
pom.xml
の記述を一部抜粋するとこんな感じ。
<plugin> <groupid>com.googlecode.maven-download-plugin</groupid> <artifactid>download-maven-plugin</artifactid> <version>1.2.0</version> <executions> <execution> <id>install-dynamodb-local</id> <phase>initialize</phase> <goals> <goal>wget</goal> </goals> <configuration> <url>https://s3-us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_2019-02-07.tar.gz <unpack>true</unpack> <outputdirectory>dynamodb_local</outputdirectory> <md5>86fe3f4a4919a37163207a086db6d86b</md5> </configuration> </execution> </executions> </plugin>
また、この時利用していたOSは何故か64bitのWindows 8(正確にはWindows 8.1)であった*1。本当に、どうしてWindows 8でビルドなんかしたんだろう……。
[問題の詳細]
これでmvn installコマンドを実行すると、ビルドが始まるのだが、上の部分を実行しようとすると次のようなエラーがでる。
[ERROR] Failed to execute goal com.googlecode.maven-download-plugin: download-maven-plugin:1.2.0:wget (install-dynamodb-local) on project XXXXXXXX: IO Error: invalid stream header: 00000000 -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.googlecode.maven-download-plugin: download-maven-plugin:1.2.0:wget (install-dynamodb-local) on project XXXXXXXX: IO Error at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216) at org.apache.maven.cli.MavenCli.main(MavenCli.java:160) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.MojoExecutionException: IO Error at com.googlecode.WGet.execute(WGet.java:260) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 19 more Caused by: java.io.StreamCorruptedException: invalid stream header: 00000000 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) at com.googlecode.DownloadCache.loadIndex(DownloadCache.java:103) at com.googlecode.DownloadCache.getEntry(DownloadCache.java:44) at com.googlecode.DownloadCache.getArtifact(DownloadCache.java:72) at com.googlecode.WGet.execute(WGet.java:210) ... 21 more
DownloadCache
という文字列が見えたので、キャッシュ関連の問題を疑い、コマンドをmvn clean install
に変更して実行してみるも状況は変わらず。
[解決策]
最終的な解決策としては、冒頭で記したようにプラグインのバージョンを上げることで解決した。pom.xmlでプラグインのバージョンを指定している箇所を以下のように修正して、ビルドが正常終了することを確認した。
- <version>1.2.0</version> + <version>1.4.0</version>
同プラグインのGitHubリポジトリを調べたが、似たようなissueは見つけることが出来なかった。もしかしたら、今回ダウンロード対象にしていたファイル限定で何か問題があったのかもしれない*2。
また、エラーメッセージで重要そうな「StreamCorruptedException: invalid stream header: 00000000」でググってみても、それらしい解決策を記載したページは見つけることが出来なかった。
検索で行き詰まりを感じたので、王道に戻ってプラグインのバージョンを確認し、自分の利用しているバージョンが古いことに気づき、何とか解決策を見つけることが出来た。とはいえ結局根本的な原因がなんなのかは全くわからないままなので、若干の気持ち悪さが残る。気持ち悪さというか、原因を特定出来ない自分の不甲斐なさというか。モヤモヤ。
その後、さらに検証として以下のことを行った。
プラグインバージョンを1.2.0に戻すと再発することが確認出来たので、やはり変なファイルキャッシュがローカルにある、という線は薄そう。プラグインのバージョンアップによってファイルキャッシュのダウンロード先が変更になった、とかだとしたら変なファイルが1.2.0で利用しているローカルディレクトリに存在しているという可能性も捨てきれない。モヤモヤ。
[まとめ]
- ライブラリやツールの動作に問題がある場合はとりあえずバージョンを上げてみるといいかも