首页 专题 文章 代码 归档

Maven打包配置中的Resource配置

1. 简介

构建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包中。

2. 标准目录

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/md

3. 打包时资源文件的配置

3.1. 打包src/main/java目录下的xml

一般情况下,我们用到的资源文件(各种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的源代码路径)


那么解决方法有:

1、配置POM.XML的resource把xml也打包到mapper目录下

那么修改pom.xml就可以了:


<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>

2、maven-resources-plugin插件

为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。

默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。

<!--
      此plugin可以用
      利用此plugin,把源代码中的xml文件,打包到相应位置,
      这里主要是为了打包Mybatis的mapper.xml文件
      -->
<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.5</version>
  <executions>
      <execution>
          <id>copy-xmls</id>
          <phase>process-sources</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>

此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <encoding>UTF-8</encoding>
        <!-- 过滤后缀为pem、pfx的证书文件 -->
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pem</nonFilteredFileExtension>
            <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
            <nonFilteredFileExtension>p12</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

3、build-helper-maven-plugin插件

<!--
此plugin可以用
利用此plugin,把源代码中的xml文件,
打包到相应位置,这里主要是为了打包Mybatis的mapper.xml文件
-->
<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>build-helper-maven-plugin</artifactId>
   <version>1.8</version>
   <executions>
       <execution>
           <id>add-resource</id>
           <phase>generate-resources</phase>
           <goals>
               <goal>add-resource</goal>
           </goals>
           <configuration>
               <resources>
                   <resource>
                       <directory>src/main/java</directory>
                       <includes>
                           <include>**/*.xml</include>
                       </includes>
                   </resource>
               </resources>
           </configuration>
       </execution>
   </executions>
</plugin>

3.2. src/main/resources目录下的xml等资源文件不被打包

默认resources目录下的文件都会被打包,如果想resources目录下的xml文件不被打包,可通过如下配置:

<!--过滤resource下的文件-->
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>*.properties</include>  <!--打包properties文件-->
        </includes>
        <excludes>
            <exclude>*.xml</exclude>  <!--过滤xml与yaml文件-->
            <exclude>*.yaml</exclude>
        </excludes>
    </resource>
</resources>

本文参考:https://blog.csdn.net/u011781521/article/details/79052725

此文阅读完毕,您可以:分享
二维码图片 扫描关注我们哟