在我的项目中强制使用CRLF行分隔符

10

我想确保在我的项目中使用 CRLF(Windows 风格)的换行符。我正在检查一些替代方案,但不确定哪一个是最好的。

期望的行为:

如果一个文件不是 CRLF 格式,IntelliJ IDEA 在底部会显示:

我希望我的 Maven profile(比如 mvn clean install -P tests)失败,并显示类似于“无效的行分隔符,不是 CRLF”这样的错误信息

非常感谢。

3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
19
我认为除非有人创建插件来实现此功能,否则不可能因为项目文件中无效的行分隔符导致 Maven 构建失败。但是,您可以在 Intellij IDEA 中配置代码检查来因此而失败。以下是如何引起这种错误: - 转到 文件 -> 设置 -> 编辑器 -> 检查 -> 不一致的行分隔符,然后选中 不一致的行分隔符 复选框,并从 严重性 下拉列表中选择 错误: -

IDEAsettings

- 转到 文件 -> 设置 -> 编辑器 -> 代码风格 并通过从 行分隔符 下拉列表中选择 Windows (\r\n) 来指定默认行分隔符(如果尚未设置)。 - - 撤消项目中某个打开文件的行分隔符设置。例如:文件 -> 行分隔符 -> CR - Classic Mac (\r) - - 对您的项目运行检查 (分析 -> 检查代码 -> 整个项目),您应该会得到一个错误: -

IDEAinspection

JetBrains 有一个 开放的错误跟踪单,可以基于检查错误来强制编译失败,因此这种方法并不完全符合您的要求。但是,在没有任何基于 Maven 的解决方案的情况下,这可能是您最好的选择。请参见 JetBrains 的 代码检查 文档获取更多信息。

另一种可能的方法是看看JetBrains的另一个持续集成工具TeamCity。虽然我没有使用过它,但也许它可以让你在检查出错时配置失败(不过从他们的文档中快速查看,我没有找到如何做到这点)。


更新:

看起来TeamCity可能确实值得一试。他们的构建失败条件文档说明:

当在您的构建中使用代码检查工具,例如代码覆盖率、重复项查找、检查等时,您的构建会生成各种数字指标。对于这些指标,您可以设置阈值,超过阈值会导致构建失败。


非常感谢您的出色回复,伙计。我会看一下的,但是在昨天整整一天的调查之后,我开始怀疑我的 Jenkins 是否将 CRLF 文件更改为 LF!有什么提示吗?非常感谢。 - stack man
@stackman 如果你使用Git,我认为它比Jenkins更相关...但这只是猜测。 - skomisa
有什么提示可以让我在Git上始终强制使用CRLF吗? - stack man
谢谢,你是王者。 - Eng

2
前面的回答说: “我认为除非有人创建了一个插件来执行此操作,否则不可能因项目文件中的无效行分隔符而导致Maven构建失败。” 但是确实有这样的插件。你可以使用checkstyle规则
<module name="RegexpMultiline">
    <property name="format" value="(?<!\r)\n"/>
    <property name="maximum" value="0"/>
    <property name="message" value="Invalid line separator, not CRLF"/>
</module>
然后配置构建使用checkstyle插件:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <failsOnError>true</failsOnError>
        <consoleOutput>true</consoleOutput>
        <includeTestSourceDirectory>true</includeTestSourceDirectory>
        <checkstyleRules>
            <module name="Checker">
                <module name="RegexpMultiline">
                    <property name="format" value="(?<!\r)\n"/>
                    <property name="maximum" value="0"/>
                    <property name="message" value="Invalid line separator, not CRLF"/>
                </module>
            </module>
        </checkstyleRules>
    </configuration>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>checkstyle</goal>
             </goals>
        </execution>
    </executions>
</plugin>
它默认绑定到“验证”阶段,如果你运行安装程序,它应该已经被激活

这种方法比我在答案中提供的方法要好得多,因为它不依赖于使用的IDE。另请参阅如何使Maven检查源代码行尾?,虽然不是重复的问题,但也很相关。 - skomisa

1
我在Linux上也遇到了同样的问题。当我使用IDEA提交时,我的行分隔符会转换为LF。当我使用SmartGit提交时,所有内容都保持为CRLF。 我所做的一切就是运行以下命令: git config --global core.autocrlf false 现在一切都很好。

这个问题与版本控制无关。你使用什么git设置在这里有点不相关,即使它也会影响情况。 - oligofren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,