mybatis的mapper.xml放在src/main/java下打包時候找不到

不知道有沒有同學遇到這麼一種情況,當然這種情況是很早以前的事情的了:

1、基於maven+mybatis搭建一個項目,然後mybatis的mapper的xml放在了src/main/java的目錄下的子目錄,然後打包的時候,發現這些xml文件都不見了。

這種情況是這樣的,maven打包的時候默認打包src/main/java下的class文件,打包src/main/resources下的配置文件

(上面發現xml不見的契機其實是這樣的:運行項目,報錯,說mapper.java裏頭的方法bind exception,這個錯誤就是xml不存在導致的

2、如果現在就是1的情況,那麼怎麼把src/main/java下的xml打包到jar包裏頭,怎麼做呢。

這種情況是這樣的,如下往pom文件的bulid節點裏頭增加如下子節點內容

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

3、現在用2的方式處理後,打包,發現確實會把xml打包到jar包裏頭,但是又遇到一個問題,運行項目連啓動都起不來。

以springboot項目爲例子,控制檯直接卡在如下位置幾秒就自動退出了:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.1.RELEASE)

怎麼處理呢?

這種情況是這樣的,檢查jar包,會發現mapper.xml是進去的,但是原先的src/main/resources下面的配置文件全部都丟失了

這種情況只要如下往pom文件的bulid節點裏頭的resources裏頭增加如下子節點內容即可,增加後如下

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>

總結:

maven打包,默認會把src/main/resources下面的配置文件打包進來,src/main/java下的java文件編譯打包進來。

一旦配置pom文件裏頭的resources節點,那麼maven打包的時候自動打破默認的撈取配置文件的位置,只撈取我們配置的位置的配置文件

補充resources裏頭的filtering屬性用法:

Filtering
Filtering 是 maven 的 resource 插件 提供的功能,作用是用環境變量、pom文件裏定義的屬性和指定配置文件裏的屬性替換屬性(*.properties)文件裏的佔位符(${jdbc.url}),具體使用如下:
在src/main/resources目錄有個配置文件jdbc.properties,內容如下:

jdbc.url=${pom.jdbc.url}
jdbc.username=${pom.jdbc.username}
jdbc.passworkd=${pom.jdbc.password}
配置 resource 插件,啓用filtering功能並添加屬性到pom:

<project>
    ...
    <!-- 用pom裏定義的屬性做替換 -->    
    <properties>
        <pom.jdbc.url>jdbc:mysql://127.0.0.1:3306/dev</pom.jdbc.url>
        <pom.jdbc.username>root</pom.jdbc.username>
        <pom.jdbc.password>123456</pom.jdbc.password>
    </properties>
    <build>
      ...
        <!-- 可以把屬性寫到文件裏,用屬性文件裏定義的屬性做替換 -->
        <filters>
            <filter>src/main/filters.properties</filter>
        </filters>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
          </resource>
        </resources>
        ...
    </build>
    ...
</project>
編譯包後target目錄下的jdbc.properties:

jdbc.url=jdbc:mysql://127.0.0.1:3306/dev
jdbc.username=root
jdbc.passworkd=123456

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章