• maven打包的resource配置问题


    一、简介

    构建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项目的标准目录结构

     

     

     

    三、打包时资源文件的配置


    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的源代码路径)

    下面通过一个简单的示例来说明:

    项目结构如下所示,有两个UserMaper.xml文件,所在目录不同

     

    默认情况下,在POM.XML目录下执行: mvn clean package 打包命令在targetclasses目录下不会把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.2、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

  • 相关阅读:
    解决listview在添加项闪烁的问题
    对于水晶报表,我欲哭无泪
    遗憾4年的.net学习和工作
    (转)字符编码笔记:ASCII,Unicode和UTF8
    关于将桌面扩展到监视器的问题 extended my windows desktop onto this monitor
    在win下mb_convert_encoding未定义的问题最终解决方案
    插入数据后, 获取该记录id的方法
    Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.
    感冒怎么办,少听音乐防止感冒 生活至上,美容至尚!
    2招按摩轻松解除黑眼圈 生活至上,美容至尚!
  • 原文地址:https://www.cnblogs.com/clover-forever/p/12556020.html
Copyright © 2020-2023  润新知