2009-06-15 2 views
21

Я работаю с проектом Maven (jar) в Netbeans (Windows), который создает отчеты Checkstyle с плагином Maven Checkstyle.Как избавиться от сообщения Checkstyle «Файл не заканчивается символом новой строки».

Независимо от того, что я делаю, я всегда получаю сообщение: File does not end with a newline для файлов классов Java.

Что я могу сделать/настроить в Netbeans или Checkstyle, чтобы избавиться от сообщения?

Версии используемого ПО:

  • WinXP SP3
  • Netbeans 6,7 RC1 (бывает с 6.5 тоже)
  • Maven 2.0.9
  • Maven Checkstyle плагин 2,2
  • Java 1.6 (Update 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

что кажется невозможным с netbeans на окнах –

+2

Возможно. Если вы можете переместить курсор за последнюю строку, вы получите его. Если это еще не очистит предупреждение, проверьте [ответ Алексея Войнова] (http://stackoverflow.com/a/15433548/1005481) и убедитесь, что Checkstyle снова запускается после изменения конфигурации. –

3

Там более простой способ сделать это. Вы можете указать файл умолчаний без перекрывая солнце 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> 
+0

Это замечательно, если вам запрещено изменять конфигурационный файл, но разрешено изменять файл запретов (это происходит!). Если вы можете изменить файл конфигурации, лучше просто удалить ненужные проверки из файла конфигурации. Меньше беспорядок и более высокая производительность. –

0

Затмение ..Window >> Preferences >> Checkstyle >> Select the configuration file >>

  1. Нажмите на кнопку "Properties" >> Uncheck Protect Checkstyle Configuration file.
  2. Нажмите на "Configure" кнопка >> искать "New Line At End Of File" >> Снимите флажок, который вы видите рядом с New Line At End Of File.
41

В моем случае это была проблема с неправильной настройкой этой проверки. По умолчанию используется стандартное соглашение о контенте линии по умолчанию. Я работал над окнами, и проект использовал концевые строки в стиле unix. Я не думаю, что игнорирование предупреждения является лучшей стратегией, так что я сделал это:

+0

Спасибо, для меня это решение. Он работает, даже если другие люди в команде имеют свои файлы в Windows, извлеченные с помощью разделителей строк CR-LF. –

6

Я бегу в эту проблему, когда файлы будут сохранены в формате UNIX вместо DOS. (или наоборот, если вы выполняете свою работу в Unix)

Чтобы исправить это, я использую программу, конвертирую из формата UNIX в DOS и сохраняю файл в этом формате.

В затмении: Файл -> Convert Line разделителей To -> Окна

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

} 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/ 114762/explaining-whole-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – Ferrybig