美文网首页MySQL我爱编程
使用maven-assembly-plugin移除resouce

使用maven-assembly-plugin移除resouce

作者: john_zhong | 来源:发表于2018-08-03 19:30 被阅读10次

    问题现象

    在Windows 7(64-bits)+eclipse Oxygen(4.7.3a)环境中,构建dble(2.18.07.2及之前)的过程中,构建结果(dble-2.17.09.1-YYYYMMDDHHMMSS-linux.tar.gz)的conf/wrapper.conf文件的换行符是CRLF(Windows换行符)——导致启动dble的时候,报错wrapper.conf有误。

    问题分析

    在源代码原件(src/main/resouces/wrapper.conf)中,换行符是正确的LF(Unix换行符)。尝试了在Linux上编译dble,CRLF问题就不会出现。这说明在构建过程中,有plugin受环境变量的影响,替换了wrapper.conf的换行符。

    解决方法

    一般来说,应该是得揪出替换wrapper.conf的换行符的Maven的plugin,然后看看它有没有参数能够调整——但由于对dble的构建lifecycle的行为不太熟悉,于是没有正面刚这个问题,而是干预打包阶段的动作,让打包插件帮我把换行符再替换回来。

    dble使用maven-assembly-plugin进行打包,其配置文件src/main/assembly/assembly-linux.xml中,可以通过调整<fileSet>的lineEnding属性(property),来设置打包前,对源目录(构建过程的前些阶段中编译好的文件)进行换行符替换。

    在构建中,靠前的阶段,处理过wrapper.conf后,会将它扔到target/generated-resources/appassembler/jsw/dble/conf里,等待打包。所以,对于这个问题,我们的解决方法,是在配置文件(assembly-linux.xml)中,给对应的<fileSet>加上<lineEnding>:

    <fileSet>
    
        <!-- 打包前将该目录下的文件换行符替换成LF -->
        <lineEnding>unix</lineEnding>
    
        <directory>target/generated-resources/appassembler/jsw/dble/conf</directory>
        <outputDirectory>dble/conf</outputDirectory>
        <includes>
            <include>*</include>
        </includes>
    </fileSet>
    

    经过实测,问题解决。

    预防措施

    继续分析构建的lifecycle,找到打包前处理wrapper.conf并替换了换行符的plugin。查找它的文档,看看能否限制它不要替换换行符或限定它只替换成LF(dble默认跑在Linux中)。然后向dble项目自身提PR。

    相关文章

      网友评论

        本文标题:使用maven-assembly-plugin移除resouce

        本文链接:https://www.haomeiwen.com/subject/qmuuvftx.html