在用Maven打包的时候发现,有一些资源文件打包不到jar包中,于是了解了一下Maven的打包配置,最后得到了解决问题的办法。

Maven资源文件的默认约定

构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构,去查找和处理各种类型的文件,这就是Maven遵循的约定优于配置原则。

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

src/main/java和src/test/java

这两个目录中的所有*.java文件会分别在compile和test-compile阶段被编译,编译的结果会被分别放到target/classes和target/test-classes目录中,但是这两个目录中的其他非*.java的文件都会被忽略掉。

src/main/resouces和src/test/resources

这两个目录中的文件也是会被分别复制到target/classes和target/test-classes目录中。

target/clasess

打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。

Maven打额外资源文件的配置

资源文件是Java代码中要使用的文件,代码在执行的时候会到指定目录去查找这些文件。一般情况下,我们用到的资源文件(各种xml,properties,xsd文件等)都放在src/mian/resources下,利用Maven打包的时候,Maven都能默认将这些资源文件打包到相应的jar包或者war包中。

但是有些时候,可能会把资源文件放到src/main/java下,比如说Mybatis的Mapper.xml文件就是和Mapper.java放在一起,也就导致了java文件能打到jar包中,Mapper.xml却没有打进jar包中。这时候,就需要在pom.xml中添加特定的配置来将这些资源文件能打进jar包或war包中。

配置有两种方法,一是在<build>标签节点下添加<resources>标签节点,二是在<build>标签节点下的<plugins>标签节点中配置maven-resources-plugin等处理资源文件的插件。

<resources>标签

<build>
.......
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
......
</build>

maven-resources-plugin插件

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

build-helper-maven-plugin插件

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

Maven排除资源文件的配置

前面说了,target/classes目录中的资源文件会全部和class字节码一起被打进jar包或war包中。这样,当你希望有一些文件不被打包的时候,就需要额外去配置maven-jar-plugin插件了。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.yanggb.main.HelloWorld</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

"可是怎么办好呢,看到你难过的时候我还是会心疼。"

maven打包额外的资源文件的更多相关文章

  1. 关于使用maven打包如何聚合资源文件

    多数情况下,我们使用maven管理多个子工程,在最后maven打包阶段将多个子工程聚合到一个jar或war包.单个子工程会有自己独立的资源配置文件,在打包的时候我们需要将其聚合在一起(各子工程中的配置 ...

  2. maven打包忽略静态资源解决办法,dispatchServlet拦截静态资源请求的解决办法

    问题: maven 打包时,有的文件打不进去target 解决: 因为maven打包默认打Java文件.在项目中的pom文件中加build标签 <build> <resources& ...

  3. 使用webpack打包ThinkPHP的资源文件

    使用webpack打包ThinkPHP的资源文件 利用自己的空余时间一直在维护http://www.wx2share.com这个小网站,全是一个人在弄,由于只租得起虚拟空间,所以后台采用了简单方便的T ...

  4. Pyinstaller打包: 将资源文件或文件夹打包到最后生成的exe中

    前提:用pyinstaller打包时部分资源文件可以利用qrc转成py文件来读取,但是有部分文件类型不适用. 原理:Pyinstaller 将资源文件一起打包到exe中.当exe运行时,会生成一个临时 ...

  5. maven不打包子模块资源文件

    在maven多模块项目中,对子模块中的测试文件不需要打包到目标项目中,以免产生影响.实现方法: 1. 将测试资源放在java/test/resources 目录下,mvn package默认不会将te ...

  6. Maven打包排除某个资源或者目录

    最近在spark streaming本地调试的时候,引入了一些资源文件,打包的时候需要给排除掉.所以就考虑使用maven的方式 详细参考官方文档:https://maven.apache.org/pl ...

  7. 使用maven打包额外的jar

    当使用maven打包的时候,部分自己的额外使用的在maven基础库里面是没有的时候: 参考:  https://blog.csdn.net/hguisu/article/details/5107268 ...

  8. vue2.0 配置build项目打包目录、资源文件(assets\static)打包目录

    vue项目默认的打包路径:根目录下的dist文件夹下: 但是在项目开发中,我们肯定希望项目提交到svn目录或者git目录下,否则每次复制过去,太麻烦了: 那怎么配置打包路径呢?下面来看看: 我们找到打 ...

  9. angular4.0 配置打包路径以及资源文件404问题

    一.配置打包路径 配置打包路径,便于提交到SVN,不用每次都复制粘贴 在.angular-cli.json文件中修改"outDir"的路径,打包后的项目将发布到路径下 二.解决打包 ...

随机推荐

  1. 在Linux(Centos7)上使用Docker运行.NetCore

    在上一篇中我们写了如何在windows中使用docker运行.netcore,既然我们了解了windows下的运行发布,我们也可以试试linux下使用docker运行.netcore项目,那么今天我们 ...

  2. SLAM+语音机器人DIY系列:(三)感知与大脑——4.音响麦克风与摄像头

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  3. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  4. Java运行时环境---ClassLoader类加载机制

    背景:听说ClassLoader类加载机制是进入BAT的必经之路. ClassLoader总述: 普通的Java开发其实用到ClassLoader的地方并不多,但是理解透彻ClassLoader类的加 ...

  5. 详解RPC远程调用和消息队列MQ的区别

    PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ...

  6. Java 原始模型(Prototype)模式

    一.什么是原型模式: 通过给出一个原型对象指明所要创建的对象的类型,然后通过复制这个原型对象来获取的更多的同类型的对象. 在Java语言中,支持原型模式,所有的对象都继承自Object对象,Objec ...

  7. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)

      中介者模式(Mediator)   调度.调停   意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...

  8. Django 加载 app 中的urls

    在 blog app 下创建 urls.py, 定义该 app 下自有的 url : new/story from blog import views from django.conf import ...

  9. new会返回NULL空指针吗

    c++中的new会返回NULL空指针吗 https://stackoverflow.com/questions/3389420/will-new-operator-return-null On a s ...

  10. Git - git tag - 查看当前分支 tag 版本&说明

    索引: 目录索引 参看代码 GitHub: git.txt 一.示例: git tag -l -n 二.说明: 1."tag" 部分 tag 代表的是标签动作,可以带参数 ,也可以 ...