とあるモジュールをバージョンアップしたタイミングでpom.xmlに記述されているjarが落ちてこないという問題が発生。
実行時にNoClassDefFoundErrorが発生して発覚。
もちろん以前からさんざん取り上げている通りNoClassDefFoundErrorの原因はそのクラスがないことなのでjarがないことを確認した。
落ちてこないjarは依存モジュールがさらに間接的に依存しているjarである。
そしてそのモジュール単体のpom.xmlには依存関係が記載されており、
mvn dependency:treeを実行すると該当のjarが表示される。
ただしプロジェクト全体のpom.xmlを読み込ませてdependency:treeを実施すると該当のjarが表示されない。
よくよく見てみると以下のメッセージが出力されており、なにやら問題ありそうだ。
[WARNING] POM for ‘xx.xx.xx:pom:1.0.xx:compile’ is invalid.
このメッセージが出ていると、該当jarの依存関係を無視してビルドを進めるため、ビルドが成功しているように見えて、
必要なjarがないという危険な状態でビルドが終わる。
根本原因はpom.xmlのアップロード時に変換されて、dependencyが落ちていたことである。
サードパーティライブラリなので手動でmvnコマンドをたたいたのだが、勝手にオリジナル違うpom.xmlを生成する凶悪なデフォルトのふるまいである。手元にあるpom.xmlを指定しているのに、それをアップロードしてくれないという・・・
この凶悪なふるまいを変更するには-DgeneratePom=falseを付与して、mvnコマンドを実施すること。
mvn deploy:deploy-file -Dfile=parent.pom -Durl=http://www.rutake.com/nexus/ -DrepositoryId=myrepo -DgroupId=com.rutake.common -DartifactId=common -Dversion=1.0.99 -Dpackaging=pom -DgeneratePom=false