如何摆脱Checkstyle消息“文件不以换行符结束”。

我正在使用NetBeans(Windows)中的Maven(jar)项目,它使用Maven Checkstyle插件创buildCheckstyle报告。

无论我做什么,我总是得到这样的信息: File does not end with a newline以Java类文件File does not end with a newline

我可以使用Netbeans或Checkstyle进行configuration来摆脱这个消息吗?

使用的软件版本:

  • WinXP SP3
  • Netbeans 6.7 RC1(也发生在6.5)
  • Maven 2.0.9
  • Maven Checkstyle插件2.2
  • Java 1.6(更新14)

在文件末尾添加换行符
要么
配置CheckStyle不在乎。

 <module name="Checker"> <!-- stuff deleted --> <module name="NewlineAtEndOfFile"> <property name="severity" value="ignore" /> </module> 

您还必须告诉Maven Checkstyle插件使用您的checkstyle配置文件。

 <plugin> <artifactId>maven-checkstyle-plugin</artifactId> <configuration> <configLocation>${basedir}/yourCheckstyle.xml</configLocation> </configuration> </plugin> 

在我的情况下,这是检查器配置不当的问题。 默认情况下,它使用行结尾的系统默认约定。 我正在研究窗口,该项目使用的是unix风格的行结尾。 我不认为忽视警告是最好的策略,所以我所做的是:

 <module name="Checker"> <module name="NewlineAtEndOfFile"> <property name="lineSeparator" value="lf" /> </module> </module> 

当文件保存为UNIX格式而不是DOS时,我遇到了这个问题。 (或者其他方式,如果你在Unix下工作)

为了解决这个问题,我使用一个程序从UNIX格式转换到DOS格式并保存。

在eclipse中:文件 – >将行分界符转换为 – > Windows

有一个更简单的方法来做到这一点。 您可以指定一个抑制文件而不覆盖太阳checkstyle配置文件:

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <configuration> <suppressionsLocation>suppressions.xml</suppressionsLocation> <configLocation>config/sun_checks.xml</configLocation> </configuration> </plugin> 

你的suppressions.xml在哪里:

 <?xml version="1.0"?> <!DOCTYPE suppressions PUBLIC "-//Puppy Crawl//DTD Suppressions 1.1//EN" "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> <suppressions> <suppress checks="NewlineAtEndOfFile" files=".java" /> </suppressions> 

Eclipse ..Window >> Preferences >> Checkstyle >> Select the configuration file >>

  1. 点击"Properties"按钮>>取消选中Protect Checkstyle Configuration file
  2. 点击"Configure"按钮>>搜索"New Line At End Of File" >>取消选中您New Line At End Of File旁边看到的复选框。

//这里是强力解决方案:

 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; /** * * @author hMueller */ public class UnixToWindowsEncoding { //rewrites all .java files in Windows encoding //a[0] = parent directory //loops through all subdirectories and fixes whatever .java file it finds public static void main(String[] a){ String startdir = a[0]; fixDir(startdir); } private static void fixDir(String dirname){ try{ File f = new File(dirname); File[] list = f.listFiles(); for(int i = 0; i < list.length; i++){ if(list[i].isDirectory()){ fixDir(list[i].getAbsolutePath()); }else{ if(list[i].getName().endsWith(".java")){ ArrayList<String> l = new ArrayList<String>(); FileReader fr = new FileReader(list[i]); BufferedReader br = new BufferedReader(fr); String line = ""; while( (line = br.readLine()) != null){ l.add(line); } br.close(); fr.close(); list[i].delete(); FileWriter fwr = new FileWriter(list[i]); for(String s : l){ fwr.write(s + "\r\n"); } fwr.flush(); fwr.close(); } } } }catch(Exception ioe){ ioe.printStackTrace(); } } }