Eclipse: отключить предупреждение только в папке [duplicate]

Я немного опаздываю на разговор, но вот мое предложение:

>>> foo = sc.parallelize([(1, ('a','b')), (2, ('c','d')), (1, ('x','y'))])
>>> foo.map(lambda (x,y): (x, [y])).reduceByKey(lambda p,q: p+q).collect()
[(1, [('a', 'b'), ('x', 'y')]), (2, [('c', 'd')])]
104
задан Uri 14 July 2009 в 21:51
поделиться

12 ответов

Я решил это, используя плагин замены maven regexp - он не решает причину, но исцеляет боль:

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>maven-replacer-plugin</artifactId>
  <version>1.3.2</version>
  <executions>
<execution>
  <phase>prepare-package</phase>
  <goals>
    <goal>replace</goal>
  </goals>
</execution>
  </executions>
  <configuration>
<includes>
  <include>target/generated-sources/antlr/**/*.java</include>
</includes>

<regex>true</regex>
<regexFlags>
  <regexFlag>MULTILINE</regexFlag>
</regexFlags>

<replacements>
  <replacement>
    <token>^public class</token>
    <value>@SuppressWarnings("all") public class</value>
  </replacement>
</replacements>
  </configuration>
</plugin>

Обратите внимание, что мне не удалось получить ** нотацию для работы , поэтому вам может потребоваться указать путь точно.

См. комментарий ниже для улучшения того, как не создавать повторяющиеся @SupressWarnings

17
ответ дан Betlista 26 August 2018 в 10:46
поделиться
  • 1
    Поскольку Мейвен не упоминался, это не обязательно отвечает на вопрос. Но он отлично работает в моем случае, поскольку я использую Maven ;-) – Kutzi 8 December 2010 в 09:36
  • 2
    То же самое можно сделать, если вы используете Ant вместо Maven, см. Мой ответ. – Jorn 23 February 2011 в 23:59
  • 3
    кажется, что ANTLR 3.4 добавляет аннотацию самостоятельно, но мне нравится общность решения (не только ANTLR генерирует код). Чтобы применить его ко всем сгенерированным источникам, я использую этот шаблон: ^(@SuppressWarnings\(.*?\)\s+)?public class. Включая аннотацию в шаблоне, она не дублируется, если она уже существует. – Silly Freak 24 December 2011 в 15:15
  • 4
    Это (более или менее) работало для меня - мне пришлось добавить ${basedir}/ до target в теге <include>. Чувствует себя странным, но поскольку он работает только с сгенерированными файлами, я возьму его! – Rob 19 January 2017 в 20:47

Для этого есть билет, Bug 220928 , который с тех пор был завершен для Eclipse 3.8. Подробнее см. этот ответ .

Если вы застряли с Eclipse 3.7 или ниже: пользователь «Marc» комментирует этот билет, созданный (или, по крайней мере, ссылки на) плагин называется «warningcleaner» в комментарий 35 . Я использую это с большим успехом, ожидая, когда эта функция будет интегрирована в Eclipse.

Это действительно очень просто:

  1. Установить плагин.
  2. Щелкните правой кнопкой мыши проект и выберите «Добавить / удалить сгенерированный характер кода».
  3. Откройте настройки проекта (щелкните правой кнопкой мыши и выберите «свойства»).
  4. Откройте вкладку «Предупреждающий очиститель».
  5. Выберите исходные папки, из которых вы хотите игнорировать предупреждения.

Warning Cleaner screenshot [/g3]

20
ответ дан Community 26 August 2018 в 10:46
поделиться
  • 1
    К сожалению, ссылка на плагин дает 403 сейчас – Kutzi 19 May 2011 в 15:00
  • 2
    Похоже, что прогресс все еще делается (чтение комментариев об ошибке) к основной реализации. Обязательно обновите вопрос / ответ, чтобы использовать определенные номера версий, если эта функция реализована. В противном случае будущие пользователи Eclipse могут быть смущены. – Chris Browne 25 October 2011 в 05:04
  • 3
    Я не чувствую, что вопрос / ответ можно в настоящее время улучшить, поскольку функциональность еще не существует, но если функциональность когда-либо добавляется в eclipse, тогда кто-то должен ее редактировать. Не обязательно меня, но если я нахожусь в нужном месте в нужное время, тогда, конечно, я это сделаю. – Chris Browne 26 October 2011 в 02:54
  • 4
    Кто-нибудь имеет текущую ссылку на этот плагин? Я бы с удовольствием мог его использовать! – Tom Tresansky 18 January 2012 в 15:55
  • 5
    Внимание: Eclipse теперь имеет встроенное решение для этого, как вы можете видеть в другом ответе от hheimbuerger. Кстати, hheimbuerger, вы должны реорганизовать этот ответ с обновленной информацией, чтобы сделать его «официальным». – Roberto 25 April 2012 в 18:55

Это можно сделать, исключив определенные каталоги из пути сборки (следующий пример приведен с использованием Eclipse 3.5) [1] Поднять путь сборки Java

  • Нажмите на Projectin Package Explorer
  • Щелкните правой кнопкой мыши, свойства
  • Выберите путь сборки Java

[2] Добавить каталоги для исключения

  • Вкладка «Источник» должна содержать сведения о папках источника проекта
  • . Разверните папку-источник и найдите свойство «Исключено:»
  • Выберите «Исключено:» и нажмите «Изменить»
  • Добавить папки в шаблоны исключения с помощью добавления / добавления нескольких опций
  • Нажмите «Готово», затем «ОК» для восстановления Eclipse.
0
ответ дан Darren 26 August 2018 в 10:46
поделиться

Пользователь @Jorn намекнул на код Ant, чтобы сделать это. Вот что у меня есть

<echo>Adding @SuppressWarnings("all") to ANTLR generated parser/lexer *.java</echo>
<echo> in ${project.build.directory}/generated-sources/antlr/</echo>
<replace dir="${project.build.directory}/generated-sources/antlr/" 
         summary="true" 
         includes="**/*.java" 
         token="public class" 
         value='@SuppressWarnings("all") public class' />

Обратите внимание, что Ant's & lt; replace> выполняет замену текста, а не замену регулярного выражения, поэтому он не может использовать метасимвол в токене, чтобы он соответствовал началу строки, как maven regexp заменить плагин.

Я делаю это в то же время, когда я запускаю Antlr из maven-antrun-plugin в моем maven pom, потому что плагин ANTLR maven не очень хорошо работает с плагином Cobertura maven.

(я понимаю, что это не ответ на исходный вопрос, но я не могу отформатировать код Ant в комментарии / ответе на другой ответ, только в ответе)

4
ответ дан djb 26 August 2018 в 10:46
поделиться

Вы можете подавлять предупреждения только на уровне проекта. Однако вы можете настроить вкладку проблем, чтобы подавлять предупреждения из файлов или пакетов. Перейдите в меню «Конфигурация содержимого» и работайте с областью «On working set:».

1
ответ дан Greg 26 August 2018 в 10:46
поделиться
  • 1
    Меню Configure Contents не имеет для меня никакого смысла. – Chris Conway 14 July 2009 в 21:56
  • 2
    Вы не можете найти его или вы не можете понять, где его перемещать? Я использую Eclipse 3.4.1 (я думаю, что установка Ganymede с добавлением PyDev). Он расположен в верхнем правом углу вкладки «Проблемы», когда вы нажимаете на значок маленькой стрелки, чтобы вывести меню для этой вкладки. – Greg 14 July 2009 в 22:03
  • 3
    Я могу найти его. Я не понимаю, что изменит настройки в этом диалоге. – Chris Conway 14 July 2009 в 22:27
  • 4
    Я вижу, как это может работать, но тогда вам придется использовать рабочие наборы, которые не являются общим решением. Это добавляет проблему, потому что теперь вам нужно обновить свой рабочий набор, чтобы увидеть правильные предупреждения. – Peter Dolberg 8 March 2012 в 22:14

Начиная с версии 3.8 M6, Eclipse (а именно: JDT) имеет встроенные функции для этого. Он настраивается через путь сборки проекта: Свойства проекта> Путь сборки Java> Компилятор> Источник

enter image description here [/g3]

Объявлено здесь: Eclipse 3.8 и 4.2 M6 - Новые и примечательные , называемые выборочно игнорируют ошибки / предупреждения из исходных папок. Это также, где снимок экрана. Это новая функция, разработанная на ранее связанном Bug 220928 .

84
ответ дан Henrik Heimbuerger 26 August 2018 в 10:46
поделиться
  • 1
    Я не мог найти, как переключать & quot; Нет & quot; - & GT; & Quot; Да & Quot; ... это «Переключить». кнопка (и не редактировать или что-то еще) ;-) – Betlista 2 October 2012 в 12:09
  • 2
    @Betlista: просто дважды щелкните его. Или нажмите кнопку «Переключить» справа. – altumano 2 November 2012 в 12:53
  • 3
    @hheimbuerger: это решение работает только для исходных папок. Но что, если у меня просто есть папка в проекте, содержащая некорректные XML-файлы? Ненавижу видеть предупреждения о них :( – altumano 2 November 2012 в 12:55
  • 4
    @altumano Вышеприведенная функция / опция происходит из плагина JDT, то есть поддержки Java для Eclipse. (Помните, что почти все в Eclipse является плагином, даже поддержка Java не испечена.) Таким образом, вам нужно будет проверить с разработчиком плагина, который вы используете для проверки XML. IIRC, их много, поэтому вам, вероятно, следует открыть новый вопрос специально для того, который вы используете. – Henrik Heimbuerger 4 November 2012 в 23:54
  • 5
    +1. Кстати, какую ОС вы использовали? Выделение шрифтов довольно странно. – Sarge Borsch 17 November 2013 в 22:19

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

Окно -> Настройки -> Java -> Компилятор -> Ошибки / предупреждения

В верхней части формы находится ссылка для настройки конкретных параметров проекта.

7
ответ дан jjnguy 26 August 2018 в 10:46
поделиться

Я делаю это с несколькими ANTLR-грамматиками, которые генерируют парсер Java, используя Ant. Скрипт сборки Ant добавляет @SuppressWarnings("all") к одному файлу Java, а @Override - к нескольким методам в другом. Я могу посмотреть, как это делается в точности, если вам интересно.

1
ответ дан Jorn 26 August 2018 в 10:46
поделиться
  • 1
    Интересная идея. Разве @SuppressWarnings не должен появляться перед объявлением класса (т. Е. Это не так просто, как вставить его в первую строку файла)? – Chris Conway 14 July 2009 в 23:00
  • 2
    Его нужно разместить там, но это выполнимо. Мне нужно было глубоко погрузиться в документацию муравьев, чтобы найти правильную функцию, но у меня нет большого опыта работы с Ant. – Jorn 14 July 2009 в 23:08
  • 3
    См. antlr.org/wiki/pages/viewpage.action?pageId=1865 , в котором описывается, как изменить шаблон ANTLR Java codegen. Однако неясно, как это сделать при использовании плагина ANTLR для Eclipse. Я думаю, что один из них остается взломать банку с плагином или использовать один из других обходных решений, перечисленных выше. – djb 23 February 2011 в 19:38

В случае ANTLR 2 можно подавить предупреждения в сгенерированном коде appenidng @SuppressWarnings перед объявлением класса в файле грамматики, например

{@SuppressWarnings("all")} class MyBaseParser extends Parser;
0
ответ дан Manuel Bernhardt 26 August 2018 в 10:46
поделиться

Прошло некоторое время с тех пор, как я выпустил плагин для очистки предупреждений, а теперь, когда я использую Eclipse 3.8, мне больше не нужно. Тем не менее, для тех, кому еще нужен этот плагин, я выпустил его на github с сайтом обновлений на bintray. Если вы все еще используете Eclipse 3.7 или раньше, это может быть полезно. Проверьте этот сайт для деталей установки.

0
ответ дан Marc 26 August 2018 в 10:46
поделиться

Этот небольшой скрипт python «исправляет» созданные M2E файлы .classpath и добавляет требуемый тег XML во все исходные папки, начиная с target/generated-sources. Вы можете просто запустить его из корневой папки проекта. Очевидно, вам нужно повторно запустить его, когда информация о проекте Eclipse будет повторно сгенерирована из M2E. И все на свой страх и риск, очевидно; -)

#!/usr/bin/env python
from xml.dom.minidom import parse
import glob
import os

print('Reading .classpath files...')
for root, dirs, files in os.walk('.'):
    for name in files:
        if (name == '.classpath'):
            classpathFile = os.path.join(root, name)
            print('Patching file:' + classpathFile)
            classpathDOM = parse(classpathFile)
            classPathEntries = classpathDOM.getElementsByTagName('classpathentry')
            for classPathEntry in classPathEntries:
                if classPathEntry.attributes["path"].value.startswith('target/generated-sources'):
                    # ensure that the <attributes> tag exists
                    attributesNode = None;
                    for attributes in classPathEntry.childNodes:
                            if (attributes.nodeName == 'attributes'):
                                attributesNode = attributes

                    if (attributesNode == None):
                        attributesNode = classpathDOM.createElement('attributes')
                        classPathEntry.appendChild(attributesNode)

                    # search if the 'ignore_optional_problems' entry exists
                    hasBeenSet = 0
                    for node in attributesNode.childNodes:
                        if (node.nodeName == 'attribute' and node.getAttribute('name') == 'ignore_optional_problems'):
                            # it exists, make sure its value is true
                            node.setAttribute('value','true')
                            #print(node.getAttribute('name'))
                            hasBeenSet = 1

                    if (not(hasBeenSet)):
                        # it does not exist, add it
                        x = classpathDOM.createElement("attribute")
                        x.setAttribute('name','ignore_optional_problems')
                        x.setAttribute('value','true')
                        attributesNode.appendChild(x)

            try:
                f = open(classpathFile, "w") 
                classpathDOM.writexml(f)
                print('Writing file:' + classpathFile)
            finally:
                f.close()
print('Done.')
1
ответ дан opajonk 26 August 2018 в 10:46
поделиться

Я не думаю, что Eclipse по своей сути обеспечивает способ сделать это на уровне каталогов (но я не уверен).

Вы могли бы сгенерировать файлы в отдельный проект Java и контрольные предупреждения для этого конкретного проекта.

Я вообще предпочитаю размещать автоматически сгенерированный код в отдельном проекте.

1
ответ дан Uri 26 August 2018 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: