Maven 配置filter导致Excel文件损坏的问题

来源:互联网 发布:澳门mac专柜 编辑:程序博客网 时间:2024/05/21 18:33

问题描述:

       系统内原本有个功能,是导出excel的报表。这个功能原本是好的。后来变更过一些配置以后,发现这个功能出问题了。也就是说,模板的格式预先设置好了,然后读取模板的流,写入数据,再输出现在这个功能出问题了,经过排查,发现是部署到web容器以后,这两个excel模板已经损坏了。对比分支,发现之前的部署并不会导致excel模板损坏

       经过再次的排查,发现是因为使用了maven的filter引起的:

<resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include><include>**/*.tld</include><include>**/*.doc</include></includes><filtering>true</filtering></resource></resources>

       使用maven的filter的目的是为了每次部署的时候根据maven命令的不同选择不同的配置文件,重写db.properties。而不需要每次都去修改数据库连接等配置。从filter的配置中可以看到,目标dir是src/main/resources目录,这个目录下就包含了两个excel文件。不清楚是何原因,这样过滤一遍之后,打出来的war包,excel文件就损坏了。

       以上问题的描述是我借用一位仁兄的写的(http://blog.csdn.net/pein_zero/article/details/52767311),因为自己也遇到类似的问题,虽然给出了一个解决方法,但不是我想要的,为了解决此问题,我就围绕如何不改目录(src/main/resources)的情况下仍能使用excel文件。主要症结就在于 excel文件不能经过过滤器过滤。这就需要借助于<excludes>节点的灵活使用。

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

1.在src/main/resources目录下,xml文件都是资源文件,且需要被过滤 
2.在src/main/resources目录下,除了xml文件以外的其他文件,也是资源文件,但它们不需要被过滤 

基于上述的理解,做出如下的配置

<resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include><include>**/*.tld</include><include>**/*.doc</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xlsx</include><include>**/*.xls</include></includes><excludes><exclude>**/*.properties</exclude><exclude>**/*.xml</exclude><exclude>**/*.tld</exclude><exclude>**/*.doc</exclude></excludes><filtering>false</filtering></resource>

此时,你在发布项目的时候发现,好像没有什么效果,记住,你必须首先重写编译一下,alt+F5 和maven claen,此时你在发布项目的时候,获取文件变得正常啦,没有损坏。ok,问题解决~




1 0
原创粉丝点击