使用maven-assembly-plugin移除resouces中的CRLF

问题现象

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容