解決idea建立ssm專案找不到mybatis的mapper的xml檔案問題
建立一個maven web工程,專案結構如下
就是想實現一個簡單的查詢功能,把spring mvc、spring 和 mybatis整合起來。
部署並啟動專案後,總是報一個錯誤:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
我估計是沒找到xml檔案,但是我記得之前在eclipse中好像配置完沒這個問題,開啟編譯後的檔案目錄檢視下mapper對應xml檔案確實是不在裡面
後來上網搜了下,別人給出的答覆:
-
idea在build工程的時候 遇到maven專案 使用的是pom檔案裡面配置的<build></build>裡面的東西
-
而這裡面如果不做特別配置 是maven預設的 編譯的時候 只搬運src/main/java裡面的java檔案到target/classes,其他檔案會被忽略
-
解決辦法就是向maven-resources-plugin外掛增加配置
-
http://bbs.csdn.net/topics/391841282?page=1#post-402070612 這個裡面有配置的全文
-
這樣配置之後 idea在build的時候 或者執行 maven test 的時候 才能把原始碼資料夾裡的xml檔案與java檔案一起搬到target/classes 裡面去
-
別人如果匯入你的這個maven工程 也不用設定idea了
-
另外 為什麼在eclipse裡面 即使pom不做這個特別配置 也沒問題 原因是eclipse在build工程的時候 不依賴 maven的pom檔案 用的eclipse的編譯機制 不會忽略原始碼資料夾裡面的xml檔案
按照這個修改下增加了個外掛,再重新編譯部署下,發現好了
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-xmls</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/classes</outputDirectory> <resources> <resource> <directory>${basedir}/src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins> </build>
至此問題解決了。