zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    LNMP笔记:解决mail函数不能发送邮件
    OPENCART记录账户密码
    Nginx 0.8.5版本access.log日志分析shell命令
    几个查询信息的api接口
    chart 图表无法在显示
    RegularExpressionValidator
    用户 'WANGYACONG\ASPNET' 登录失败
    'IIS APPPOOL\ASP.NET V4.0' 登录失败
    正则表达式(转载)
    不小心删除了默认数据库的恢复方法
  • 原文地址:https://www.cnblogs.com/yanggb/p/10768569.html
Copyright © 2011-2022 走看看