一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Maven學習筆記(十二)

 liang1234_ 2018-11-27

一、簡介


構(gòu)建Maven項目的時候,如果沒有進行特殊的配置,Maven會按照標準的目錄結(jié)構(gòu)查找和處理各種類型文件。

● src/main/java和src/test/java 

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

● src/main/resouces和src/test/resources
這兩個目錄中的文件也會分別被復制到target/classes和target/test-classes目錄中。
 
● target/classes

打包插件默認會把這個目錄中的所有內(nèi)容打入到j(luò)ar包或者war包中。


如下所示:




二、Maven項目的標準目錄結(jié)構(gòu)


  • src
    • main
      • java         源文件 
      • resources    資源文件
      • filters   資源過濾文件
      • config   配置文件
      • scripts   腳本文件
      • webapp   web應(yīng)用文件
    • 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

三、打包時資源文件的配置


3.1、打包src/main/java目錄下的xml


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


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


下面通過一個簡單的示例來說明:


項目結(jié)構(gòu)如下所示,有兩個UserMaper.xml文件,所在目錄不同




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


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




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


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


  1. <build>
  2. <!-- 資源目錄 -->
  3. <resources>
  4. <resource>
  5. <!-- 設(shè)定主資源目錄 -->
  6. <directory>src/main/java</directory>
  7. <!-- maven default生命周期,process-resources階段執(zhí)行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,只處理如下配置中包含的資源類型 -->
  8. <includes>
  9. <include>**/*.xml</include>
  10. </includes>
  11. <!-- maven default生命周期,process-resources階段執(zhí)行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,不處理如下配置中包含的資源類型(剔除下如下配置中包含的資源類型)-->
  12. <excludes>
  13. <exclude>**/*.yaml</exclude>
  14. </excludes>
  15. <!-- maven default生命周期,process-resources階段執(zhí)行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,指定處理后的資源文件輸出目錄,默認是${build.outputDirectory}指定的目錄-->
  16. <!--<targetPath>${build.outputDirectory}</targetPath> -->
  17. <!-- maven default生命周期,process-resources階段執(zhí)行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,是否對主資源目錄開啟資源過濾 -->
  18. <filtering>true</filtering>
  19. </resource>
  20. </resources>
  21. </build>

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




Resources官方文檔地址為:http://maven./pom.html#Resources


(2)maven-resources-plugin插件


為了使項目結(jié)構(gòu)更為清晰,Maven區(qū)別對待Java代碼文件和資源文件,maven-compiler-plugin用來編譯Java代碼,maven-resources-plugin則用來處理資源文件。


默認的主資源文件目錄是src/main/resources,很多用戶會需要添加額外的資源文件目錄,這個時候就可以通過配置maven-resources-plugin來實現(xiàn)。

  1. <!--
  2. 此plugin可以用
  3. 利用此plugin,把源代碼中的xml文件,打包到相應(yīng)位置,
  4. 這里主要是為了打包Mybatis的mapper.xml文件
  5. -->
  6. <plugin>
  7. <artifactId>maven-resources-plugin</artifactId>
  8. <version>2.5</version>
  9. <executions>
  10. <execution>
  11. <id>copy-xmls</id>
  12. <phase>process-sources</phase>
  13. <goals>
  14. <goal>copy-resources</goal>
  15. </goals>
  16. <configuration>
  17. <outputDirectory>${basedir}/target/classes</outputDirectory>
  18. <resources>
  19. <resource>
  20. <directory>${basedir}/src/main/java</directory>
  21. <includes>
  22. <include>**/*.xml</include>
  23. </includes>
  24. </resource>
  25. </resources>
  26. </configuration>
  27. </execution>
  28. </executions>
  29. </plugin>

此外,資源文件過濾也是Maven的一大特性,你可以在資源文件中使用${propertyName}形式的Maven屬性,然后配置maven-resources-plugin開啟對資源文件的過濾,之后就可以針對不同環(huán)境通過命令行或者Profile傳入屬性的值,以實現(xiàn)更為靈活的構(gòu)建。

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-resources-plugin</artifactId>
  4. <configuration>
  5. <encoding>UTF-8</encoding>
  6. <!-- 過濾后綴為pem、pfx的證書文件 -->
  7. <nonFilteredFileExtensions>
  8. <nonFilteredFileExtension>pem</nonFilteredFileExtension>
  9. <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
  10. <nonFilteredFileExtension>p12</nonFilteredFileExtension>
  11. </nonFilteredFileExtensions>
  12. </configuration>
  13. </plugin>

(3)build-helper-maven-plugin插件

  1. <!--
  2. 此plugin可以用
  3. 利用此plugin,把源代碼中的xml文件,
  4. 打包到相應(yīng)位置,這里主要是為了打包Mybatis的mapper.xml文件
  5. -->
  6. <plugin>
  7. <groupId>org.codehaus.mojo</groupId>
  8. <artifactId>build-helper-maven-plugin</artifactId>
  9. <version>1.8</version>
  10. <executions>
  11. <execution>
  12. <id>add-resource</id>
  13. <phase>generate-resources</phase>
  14. <goals>
  15. <goal>add-resource</goal>
  16. </goals>
  17. <configuration>
  18. <resources>
  19. <resource>
  20. <directory>src/main/java</directory>
  21. <includes>
  22. <include>**/*.xml</include>
  23. </includes>
  24. </resource>
  25. </resources>
  26. </configuration>
  27. </execution>
  28. </executions>
  29. </plugin>

3.2、src/main/resources目錄下的xml等資源文件不被打包


默認resources目錄下的文件都會被打包,如果想resources目錄下的xml文件不被打包,可通過如下配置:

  1. <!--過濾resource下的文件-->
  2. <resources>
  3. <resource>
  4. <directory>src/main/resources</directory>
  5. <includes>
  6. <include>*.properties</include> <!--打包properties文件-->
  7. </includes>
  8. <excludes>
  9. <exclude>*.xml</exclude> <!--過濾xml與yaml文件-->
  10. <exclude>*.yaml</exclude>
  11. </excludes>
  12. </resource>
  13. </resources>

編譯之后如下:




當然也可以通過插件來實現(xiàn)

  1. <plugin>
  2. <artifactId>maven-resources-plugin</artifactId>
  3. <executions>
  4. <execution>
  5. <id>copy-resources</id>
  6. <phase>validate</phase>
  7. <goals>
  8. <goal>copy-resources</goal>
  9. </goals>
  10. <configuration>
  11. <!-- 并把文件復制到target/conf目錄下-->
  12. <outputDirectory>${project.build.directory}/conf</outputDirectory>
  13. <resources>
  14. <resource>
  15. <directory>src/main/resources</directory>
  16. <!-- 指定不需要處理的資源 <excludes> <exclude>WEB-INF/*.*</exclude> </excludes> -->
  17. <excludes> <exclude>**/*.xml</exclude> </excludes>
  18. <filtering>true</filtering>
  19. </resource>
  20. </resources>
  21. </configuration>
  22. </execution>
  23. </executions>
  24. </plugin>

實現(xiàn)的效果如下:



編譯好之后,會在target目錄下生成conf目錄并且把resources目錄下的所有文件都自動拷貝到target/conf/目錄下


參考: https://www.cnblogs.com/pixy/p/4798089.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    99香蕉精品视频国产版| 在线日韩中文字幕一区 | 欧美成人免费一级特黄| 97人摸人人澡人人人超碰| 妻子的新妈妈中文字幕| 欧美日韩亚洲综合国产人| 亚洲中文在线观看小视频| 国产精品国产亚洲区久久| 免费人妻精品一区二区三区久久久| 91蜜臀精品一区二区三区| 日韩一区二区三区嘿嘿| 亚洲天堂精品在线视频| 男女一进一出午夜视频| 色婷婷亚洲精品综合网| 欧洲一区二区三区蜜桃| 91福利免费一区二区三区| 邻居人妻人公侵犯人妻视频| 国产亚洲欧美另类久久久| 尹人大香蕉一级片免费看| 99国产高清不卡视频| 少妇人妻一级片一区二区三区| 正在播放国产又粗又长| 国产精品欧美日韩中文字幕| 欧美日韩校园春色激情偷拍| 国产一区欧美一区日韩一区| 中文字幕乱子论一区二区三区| 国产av熟女一区二区三区蜜桃| 欧美日韩综合免费视频| 亚洲熟女乱色一区二区三区| 六月丁香六月综合缴情| 国产一级不卡视频在线观看| 色婷婷日本视频在线观看| 色婷婷激情五月天丁香| 日韩欧美高清国内精品| 黄色片一区二区在线观看| 久草国产精品一区二区| 91国内视频一区二区三区| 国产精品熟女在线视频| 日本黄色高清视频久久| 国产户外勾引精品露出一区| 熟女白浆精品一区二区|