I want to ensure CRLF (Windows style) line separator in my project. I am checking a few alternatives, but not sure which one is the best for this.
Desired Behavior:
If a file is not CRLF, which IntelliJ IDEA shows at the bottom:
I want my maven profile, let's say mvn clean install -P tests to fail, saying something like "Invalid line separator, not CRLF"
Thanks a lot.
From the main menu, select File | File Properties | Line Separators, and then select a line ending style from the list.
There are two ways to represent a line ending in a source code file. CRLF (carriage return + line feed); or just LF (line feed).
The line separator used by the in-memory representation of file contents is always the newline character. When a file is being loaded, the line separator used in the file on disk is stored in a per-buffer property, and all line-endings are converted to newline characters for the in-memory representation.
I had the same issue on Linux. When I commit with IDEA then I get my line separators converted to LF. When I do commit with SmartGit then all stays CRLF.
All I did - command:
git config --global core.autocrlf false
And now everything is fine.
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. However, you can configure a code inspection in Intellij IDEA to fail for that reason. This is how you could provoke such a failure:
JetBrains has an 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 documentation from JetBrains for more information.
One other possible approach is to look at TeamCity, another JetBrains tool for continuous integration. I haven't used it, but perhaps it allows you to configure failure when there are inspection errors (though from a quick look at their documentation I couldn't see how).
Update:
It looks like TeamCity might be worth a look after all. Its documentation on Build Failure Conditions states:
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.
Previous answer stated:
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.
But there is plugins for that. You can have a 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>
And then configure build to use checkstyle plugin:
<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>
It binds to "verify" phase by default that should be already activated if you run install.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With