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

时间:2018-01-30 10:04:40

标签: maven intellij-idea newline separator

我想确保项目中的CRLF(Windows样式)行分隔符。我正在检查一些替代方案,但不确定哪一个是最好的。

所需行为:

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

我想要我的maven个人资料,让我们说 mvn clean install -P tests 失败,说“无效的行分隔符,而不是CRLF”

非常感谢。

3 个答案:

答案 0 :(得分:5)

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

  • 导航至文件 - >设置 - >编辑 - >检查 - >不一致的行分隔符然后选中不一致的行分隔符框并从下拉列表中选择错误 严重性

IDEAsettings

  • 导航至文件 - >设置 - >编辑 - >代码样式并通过从行分隔符下拉列表中选择 Windows(\ r \ n)来指定默认行分隔符(如果尚未设置)。
  • 使项目中某些打开文件的行分隔符设置无效。例如:文件 - >线分隔符 - > CR - Classic Mac(\ r)
  • 对您的项目运行检查(分析 - >检查代码 - >整个项目),您现在应该收到错误:

IDEAinspection

JetBrains有open bug ticket根据检查错误强制编译失败,因此这种方法并不完全符合您的要求。但是,如果没有任何基于Maven的解决方案,那么你可以做到最好。有关详细信息,请参阅JetBrains的Code Inspection文档。

另一种可能的方法是查看另一个JetBrains工具TeamCity以进行持续集成。我还没有使用它,但也许它允许你在出现检查错误时配置故障(虽然从他们的文档中快速查看我无法看到)。

<强>更新

看起来TeamCity可能值得一看。其documentation on Build Failure Conditions州:

  

在构建中使用代码检查工具时,例如代码覆盖率,   重复查找程序,检查等,您的构建生成   各种数字指标。 对于这些指标,您可以指定阈值   当超出时,将无法构建

答案 1 :(得分:0)

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

我所做的-命令:

git config --global core.autocrlf false

现在一切都很好。

答案 2 :(得分:0)

先前的回答:

我认为,除非有人创建了插件来执行此操作,否则由于项目文件中无效的行分隔符,可能导致Maven构建失败。

但是有 个插件。例如,您可以拥有checkstyle rule

<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 defaultshould be already activated if you run install