maven打包额外的资源文件

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

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

原文地址:https://www.cnblogs.com/yanggb/p/10768569.html

时间: 2024-10-09 07:46:53

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

Android Maven打包批量替换资源文件(overlay换皮肤)&amp;AAR打包依赖模块覆盖策略

1.AAR打包覆盖 主module(APK)会将AAR中同名资源覆盖: 策略如下: 资源文件例如图片,layout是采用覆盖方式. values文件例如strings.xml是采用合并方式. 有依赖的模块只能采用aar进行打包,例如ui库等二方库. 建议将所有模块共同的resource资源放到通用module中,并且建立相应的命名机制,防重复. 以后如有业务独立的模块可以打成bundle,bundle可以看成一个独立的apk,拥有独立的资源文件 2. maven支持编译时指定res目录,(和An

Maven,如何筛选资源文件

如何筛选资源文件: <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> 启用筛选,默认false </resource> </resources> </build> 在src/main/resources里,新增一个application.

Maven 打包时丢失properties文件

今天在打包项目war文件的时候,突然发现居然每个action包里面的properties文件都没打进来,在网上看了半天终于找到解决方法. 问题:maven执行package命令打包时,src/main/java路径下的properties文件偶尔丢失 解决方式:pom.xml中加入resources配置 <build> <resources> <resource> <directory>src/main/java</directory> <

Spring Boot Maven 打包可执行Jar文件

本文转载自:http://blog.csdn.net/smilecall/article/details/56288972 Maven pom.xml 必须包含 <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-mave

Spring Boot Maven 打包可执行Jar文件!

Maven pom.xml 必须包含 [plain] view plain copy <packaging>jar</packaging> [html] view plain copy <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</ar

利用Maven打包时,如何包含更多的资源文件

首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种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学习-处理资源文件

转自:http://www.cnblogs.com/now-fighting/p/4888343.html 在前面两篇文章中,我们学习了Maven的基本使用方式和Maven项目的标准目录结构.接下来,我们来看下Maven是如果管理项目中的资源文件的. Java项目的资源文件,主要用于存储系统的配置信息,以及提供系统集成的配置文件.项目中的资源文件夹下一般都存储了以.properties为后缀的文件以及.xml为后缀的文件,用于记录系统的上下文关系.log以及jdbc相关的配置信息. 为Jar包添

【转载】利用MAVEN打包时,如何包含更多的资源文件

首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种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

Delphi 中将一些 Dll等生成资源文件打包成一个独立的EXE程序方法步骤

资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在资源文件中的名称->类型->实际文件名称. 例如:要将文件名 demo.Dll的文件打包成一个资源文件,首先 新建一个文本文档,输入内容 mydemoDll RCDATA demo.DLL mydemoDll 和 RCDATA 你可以随便写,这个是为了在使用资源时定义的名称和类型你也可以写成:a