maven build resource


使用resource中的jar包資源作為UrlClassloader 中出現了src下的資源文件沒有被maven打入包的情況,故有此文章

 

1 https://www.cnblogs.com/pixy/p/4798089.html

 

構建Maven項目的時候,如果沒有進行特殊的配置,Maven會按照標准的目錄結構查找和處理各種類型文件

 

src/main/java和src/test/java 

這兩個目錄中的所有*.java文件會分別在comile和test-comiple階段被編譯,編譯結果分別放到了target/classes和targe/test-classes目錄中,但是這兩個目錄中的其他文件都會被忽略掉。

 

src/main/resouces和src/test/resources

這兩個目錄中的文件也會分別被復制到target/classes和target/test-classes目錄中

 

target/classes

打包插件默認會把這個目錄中的所有內容打入到jar包或者war包中。

 

 

Maven項目的標准目錄結構

  • src
    • main
      • java         源文件 
      • resources    資源文件
      • filters   資源過濾文件
      • config   配置文件
      • scripts   腳本文件
      • webapp   web應用文件
    • test
      • java    測試源文件
      • resources    測試資源文件
      • filters    測試資源過濾文件
    • it       集成測試
    • assembly    assembly descriptors
    • site    Site
  • target
    • generated-sources
    • classes
    • generated-test-sources
    • test-classes
    • xxx.jar
  • pom.xml
  • LICENSE.txt
  • NOTICE.txt
  • README.txt

 

資源文件的配置

資源文件是Java代碼中要使用的文件。代碼在執行的時候會到指定位置去查找這些文件。前面已經說了Maven默認的處理方式,但是有時候我們需要進行自定義的配置。

有時候有些配置文件通常與.java文件一起放在src/main/java目錄(如mybatis或hibernate的表映射文件)。有的時候還希望把其他目錄中的資源也復制到classes目錄中。這些情況下就需要在Pom.xml文件中修改配置了。

可以有兩種方法:

  • 一是在<build>元素下添加<resources>進行配置。
  • 另一種是在<build>的<plugins>子元素中配置maven-resources-plugin等處理資源文件的插件。

 

 

 

2 https://blog.csdn.net/u011781521/article/details/79052725

一般情況下,我們用到的資源文件(各種xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包時,maven能把這些資源文件打包到相應的jar或者war里。


有時候,比如mybatis的mapper.xml文件,我們習慣把它和Mapper.java放一起,都在src/main/java下面,這樣利用maven打包時,就需要修改pom.xml文件,來把mapper.xml文件一起打包進jar或者war里了,否則,這些文件不會被打包的。(maven認為src/main/java只是java的源代碼路徑)

項目結構如下所示,有兩個UserMaper.xml文件,所在目錄不同

 

 

 

默認情況下,在POM.XML目錄下執行: mvn clean package 打包命令在target\classes目錄下不會把UserMapper.xml打包到下mapper目錄下

 

而resources目錄下的文件始終都會打包進jar包或war包

 

 

這個時候使用mybatis就會出一些問題,找不到UserMapper所對應的xml文件解決方法有如下幾種:

(1)配置POM.XML的resource把xml也打包到mapper目錄下

    <build>
       <!-- 資源目錄 -->    
        <resources>    
            <resource>    
                <!-- 設定主資源目錄  -->    
                <directory>src/main/java</directory>    
 
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,只處理如下配置中包含的資源類型 -->     
				 <includes>
					  <include>**/*.xml</include>
				 </includes>  
                     
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,不處理如下配置中包含的資源類型(剔除下如下配置中包含的資源類型)-->      
				<excludes>  
					<exclude>**/*.yaml</exclude>  
				</excludes>  
 
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,指定處理后的資源文件輸出目錄,默認是${build.outputDirectory}指定的目錄-->      
                <!--<targetPath>${build.outputDirectory}</targetPath> -->      
   
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,是否對主資源目錄開啟資源過濾 -->    
                <filtering>true</filtering>     
            </resource>  			
        </resources> 	
  </build>

 

其中**/*這樣的寫法,是為了保證各級子目錄下的資源文件被打包。resources是可以看做是容器,這個容器里面可以放很多個像resource這樣的配置。而directory就是配置文件所在的路徑,includes從英文單詞角度看,就是包含的意思,此時在執行命令,就會把xml也打包到mapper目錄下了
————————————————

(2)maven-resources-plugin插件

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM