maven打包的resource配置问题

1、简介html

构建Maven项目的时候,若是没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各类类型文件。java

● src/main/java和src/test/java
这两个目录中的全部*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,可是这两个目录中的其余文件都会被忽略掉。mybatis

● src/main/resouces和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
● target/classes
打包插件默认会把这个目录中的全部内容打入到jar包或者war包中。app

 

以下所示:maven

 

 

 

 

 

 

2、Maven项目的标准目录结构ui

 

 

 

 

 

 

 

3、打包时资源文件的配置spa


3.一、打包src/main/java目录下的xml.net

通常状况下,咱们用到的资源文件(各类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>

 

(2)maven-resources-plugin插件

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

默认的主资源文件目录是src/main/resources,不少用户会须要添加额外的资源文件目录,这个时候就能够经过配置maven-resources-plugin来实现。

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

 

 

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

 

 

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


 

 

 

 


编译好以后,会在target目录下生成conf目录而且把resources目录下的全部文件都自动拷贝到target/conf/目录下

 

原文连接:https://blog.csdn.net/u011781521/article/details/79052725

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

相关文章
相关标签/搜索