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

Forcing CRLF line separator in my project

我想确保在我的项目中使用 CRLF(Windows 样式)行分隔符。我正在检查几个备选方案,但不确定哪个是最好的。

期望的行为:

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

我想要我的 maven 配置文件,假设 mvn clean install -P tests 失败,比如 "Invalid line separator, not CRLF"

非常感谢。

我认为不可能由于项目文件中的行分隔符无效而导致 Maven 构建失败,除非有人创建了一个插件来执行此操作。但是,您可以在 Intellij IDEA 中将代码检查配置为因该原因而失败。这就是你如何引发这样的失败:

  • 导航至 文件 -> 设置 -> 编辑器 -> 检查 -> 不一致的行分隔符 然后选中 不一致的行分隔符 复选框select Error 来自 Severity:
  • 的下拉列表

  • 导航至 文件 -> 设置 -> 编辑器 -> 代码样式 并通过 selecting [=64= 指定默认行分隔符] (\r\n) 来自 行分隔符 下拉列表(如果尚未设置)。
  • 使项目中某些打开文件的行分隔符设置无效。例如:文件 -> 行分隔符 -> CR - 经典 Mac (\r)
  • 运行 检查您的项目(分析 -> 检查代码 -> 整个项目),您现在应该得到一个错误:

JetBrains 有一份来自 JetBrains 的 open bug ticket to force compilation failure based on inspection errors, so this approach is not exactly what you were asking for. But in the absence of any Maven-based solution it might be best you can do. See the Code Inspection 文档以获取更多信息。

另一种可能的方法是查看 TeamCity,这是另一个用于持续集成的 JetBrains 工具。我没有使用过它,但也许它允许您在出现检查错误时配置失败(尽管快速查看他们的文档我看不出如何操作)。


更新:

看来 TeamCity 还是值得一看的。它的 documentation on Build Failure Conditions 声明:

When using code examining tools in your build, like code coverage, duplicates finders, inspections and so on, your build generates various numeric metrics. For these metrics you can specify a threshold which, when exceeded, will fail a build.

我在 Linux 上遇到了同样的问题。当我提交 IDEA 时,我将行分隔符转换为 LF。当我使用 SmartGit 提交时,所有内容都保留为 CRLF。

我所做的一切 - 命令:

git config --global core.autocrlf false

现在一切都很好。

之前的回答是:

I don't think it is possible to cause the Maven build to fail due to invalid line separators in your project's files unless someone has created a plugin to do that.

但是 插件。你可以有一个 :

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

binds to "verify" phase by default that should be already activated if you run install.