俺俺、俺だよ俺。

特に続ける気のないブログ。


テーマ:
現在の開発では、これまでの旧態依然とした開発ではなく、ライブラリ管理やビルドをMavenで行い、データベース周りはMyBatisを使用し、DIコンテナとしてGuiceを使用し、SVNでソース管理をしておいてJenkinsがSVNを監視して変更があったらビルドしてJUnitでテストを行う。



・・・と、割と(今更感が否めませんが)近代化したことをやっております。



いやー、
MavenとMyBatisっていいですねー。Mavenならいちいちネット上からライブラリを探して落としてきてlibフォルダ配下に置いてパスを通してってやる必要がないんですから。MyBatisも、ソースにはメソッドだけ宣言しておいて、実装はXMLでできます。SQLをXMLで外出しできるのが非常にありがたいですね。なんで今までSQLをソースに直書きしてたんだろう?っていうか今まで長いことJavaとDBを触ってきて知らなかったってのが情けない。



しかしちょっと初めてなこと尽くしで苦労したことも多いです。



特に苦労したのがローカルでJUnitを起動して成功したのでSVNに上げたところ、Jenkinsではテストが失敗するという謎な現象。



いくらJenkinsのテストのログを見ても、「そうは言ってもローカルではちゃんと設定してあるよ」ということばかり。



特に意味不明だったのが、「
Mapped Statements collection does not contain value for クラス名」というエラー。



このエラー、ちょっと検索すると、
MyBatisの設定の問題で、先ほど挙げたメソッドを宣言したソースと実装のXMLがかみ合ってない時に出るエラーのようです。



たとえば「
HogeMapper.java」という名前でメソッドを宣言するソースを作った場合、XMLは「HogeMapper.xml」という名前にして、きちっとXML内のnamespaceにHogeMapperを完全修飾名で宣言しなければなりませんが、これらが上手くかみ合っていないと前述のエラーになってしまいます。「中身がねーよ」って言われてるんですね。



しかしもちろんローカルでは上手くいっているわけですから、そんなミスはあり得ません。



なんでかなーとずっと悩んでいたのですが、ふとJenkins内のclassファイル出力フォルダを見ると、
HogeMapper.classはあるのにHogeMapper.xmlがありませんでした。



そうなのです、自分は
HogeMapper.javaとHogeMapper.xmlを同じフォルダに入れていたのです。



Eclipseで自動的にビルドを行うと、ソースフォルダに置いてある*.java以外のファイルも勝手にclassファイル出力先にコピーしてくれますが、
Mavenでビルドを行うとそうはいかないのです。



たぶん設定で変えられると思うのですが、
Mavenではリソースの配置場所が最初からあらかじめ決められています。

javaのソースファイルはsrc/
main/java配下に、それ以外のリソースはsrc/main/resources配下に。他にもいろいろ決まっているので、気になる方はここ(
)を参照してください。



つまり、classファイル出力先でjavaとxmlを一緒にしたい場合、

src/
main/java配下にHogeMapper.javaを作成したら、

src/
main/resources配下にHogeMapper.xmlを置く必要があったわけでした。



気が付くまで結構時間がかかりました。だってなかなか検索しても出てこないんだもの…。



たぶん常識だろと思う人もいるんでしょうが、自分にとっては新しいことだったので備忘的に記事にしました。

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

AD
いいね!した人  |  コメント(0)  |  リブログ(0)

まぐろさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。