2009-06-15 198 views
21

我正在使用NetBeans(Windows)中的Maven(jar)项目,它使用Maven Checkstyle插件创建Checkstyle报告。如何摆脱Checkstyle消息'文件不以换行符结束'。

无论我做什么,我总是会收到关于Java类文件的消息:File does not end with a newline

我可以在Netbeans或Checkstyle中做什么/配置以摆脱消息?

  • 的WinXP SP3
  • 的Netbeans 6.7 RC1(6.5也发生)
  • 的Maven 2.0.9
  • 的Maven插件Checkstyle的2.2
  • 的Java 1.6(更新:已使用软件

    版本14)

回答

9

在文件末尾放一个换行符

配置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> 
+3

在windows上使用netbeans似乎是不可能的 – 2009-06-19 11:16:41

+2

这是可能的。如果你可以将光标移动到最后一行,那么你已经掌握了它。如果仍然没有清除警告,请检查[Alexey Voinov的回答](http://stackoverflow.com/a/15433548/1005481),并确保Checkstyle在配置更改后再次运行。 – 2014-01-24 13:20:28

3

有做这个简单的方法。

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

如果禁止更改配置文件,但允许更改抑制文件(它发生!),这很好。如果您可能更改配置文件,最好从配置文件中删除不需要的检查。更少的混乱和更好的性能。 – 2014-01-24 13:17:44

0

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

  1. 点击"Properties"按钮>>取消选中您可以在不重写太阳的CheckStyle配置文件指定一个文件镇压Protect Checkstyle Configuration file
  2. 点击"Configure"按钮>>搜索"New Line At End Of File" >>取消选中您在New Line At End Of File旁边看到的复选框。
41

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

+0

谢谢,对我来说这是解决方案。即使团队中的其他人使用CR-LF行分隔符检出了Windows上的文件,它也能正常工作 – 2015-04-08 10:48:42

6

我碰到这个问题,当文件被保存为UNIX格式,而不是DOS。 (或周围,如果你做你的工作在Unix的其它方式)

要解决它,我用一个程序就从UNIX格式DOS转换和保存该格式的文件。

在Eclipse: 文件 - >转换行分隔符 - >的Windows

-2

//这里是蛮力解决方案: “在文件的结尾放一个换行符”

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(); 
    } 
} 

}