諸注意
- コンプライアンスの問題によりスクショ等は載せておりません。
- 新人エンジニア向けの記事です。eclipse を細部までご存知の方にとっては読む価値の無い物です。
- "mvn clean install" すると問題が解決するけど、なぜ解決しているのか理由が分からない" という新人さんにお勧めです。
問題: BeanCreationException が解決しない
eclipse 上で、Bean を定義している.java, .xml を修正しても解決しなかった事が、今回記事を書く事になった理由です。
解決策: target 配下を見てみよう
eclipse 上で編集したデータはtarget ディレクトリ配下に反映され、それらが実行されます(main/java, main/resources 配下のファイルが直接実行されるワケではない)。
eclipse へJAVA プロジェクトをimport する際に、.classpath というファイルも含まれているのですが、コイツの中でtarget 配下が定義されている様です。
i) Java ファイルでBean 定義している場合
基本的にはmain/java 配下を編集してセーブした場合、target 配下のclass ファイルに反映されるはずです。
class ファイルは(基本的には)直接弄れないはずなので、どうしてもエラーが解決しない場合はmvn clean install
し直してみましょう。
※これによりtarget ディレクトリが一度削除されて.java ファイルを元に.class ファイルが作り直されます。
Maven 公式
ii) xml ファイルでBean 定義している場合
こっちのケースが曲者で、コレこそが今回記事を殴り書いた一番の理由です。
.java ファイルの場合、eclipse で編集して"Refresh" をするとtarget 配下に反映されるのですが、.xml ファイルは"Refresh" しても反映されません!
.xml ファイルの修正を反映するには、target 配下に存在する同名の.xml ファイルを修正するか、mvn clean install
し直す必要がある様です。※因みにmvn compile
では反映されませんでした。
著者はmain/resources 配下の実行パスにすら含まれていないファイルを修正して「直らねぇ!」と嘆いていたワケです。皆さんが同じ轍を踏まないように願っています。
まとめ
現場からは以上です。
mvn clean install
で何となく問題が解決してしまうのは、何らかの事情で.java ファイルが"Refresh" されていなかったり、target 配下の.xml ファイルが修正されていない場合でも、target 配下が0 から作り直されるからなんです。
この辺りは公式ドキュメント追ってみると理解が深まると思うので、最後にリンクを貼って終わりにします。
Maven 公式ドキュメント
eclipse 公式ドキュメント