我正在 Netbeans (Windows) 中使用 Maven (jar) 项目,该项目使用 Maven Checkstyle 插件创建 Checkstyle 报告。
无论我做什么,我总是收到消息:
File does not end with a newline
对于 Java 类文件。
我可以在 Netbeans 或 Checkstyle 中做什么/配置来消除该消息?
所用软件版本:
就我而言,这是该检查器配置不当导致的问题。默认情况下,它使用系统默认的行结尾约定。我当时在 Windows 上工作,项目使用了 UNIX 风格的行结尾。我不认为忽略警告是最好的策略,所以我所做的是:
<module name="Checker">
<module name="NewlineAtEndOfFile">
<property name="lineSeparator" value="lf" />
</module>
</module>
在文件末尾添加换行符
或
配置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 格式而不是 DOS 格式时,我遇到了这个问题。 (如果你在 Unix 上工作,或者其他方式)
为了解决这个问题,我使用了一个程序将 UNIX 格式转换为 DOS 格式,并以该格式保存文件。
在日食中: 文件 -> 将行分隔符转换为 -> Windows
有一种更简单的方法可以做到这一点。您可以指定抑制文件而不覆盖 sun 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>
日食
..Window >> Preferences >> Checkstyle >> Select the configuration file >>
"Properties"
按钮 >> 取消选中 Protect Checkstyle Configuration file
。"Configure"
按钮 >> 搜索 "New Line At End Of File"
>> 取消选中 New Line At End Of File
旁边的复选框。 在发现问题的课程末尾添加新行(按 Enter 键)
最有效的方法是更改您这边的行分隔符。 问题看起来像是您有一个 CRLF 行分隔符,但 checkstyle 需要 macOS Unix 风格 例如,对于 Intellij Idea,您可以使用此 guide
只需在文件末尾添加一行即可。就可以解决了。
//这里是暴力解决方案:
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();
}
}
}