Я немного опаздываю на разговор, но вот мое предложение:
>>> 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')])]
Я решил это, используя плагин замены 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
Для этого есть билет, Bug 220928 , который с тех пор был завершен для Eclipse 3.8. Подробнее см. этот ответ .
Если вы застряли с Eclipse 3.7 или ниже: пользователь «Marc» комментирует этот билет, созданный (или, по крайней мере, ссылки на) плагин называется «warningcleaner» в комментарий 35 . Я использую это с большим успехом, ожидая, когда эта функция будет интегрирована в Eclipse.
Это действительно очень просто:
[/g3]
Это можно сделать, исключив определенные каталоги из пути сборки (следующий пример приведен с использованием Eclipse 3.5) [1] Поднять путь сборки Java
[2] Добавить каталоги для исключения
Пользователь @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 в комментарии / ответе на другой ответ, только в ответе)
Вы можете подавлять предупреждения только на уровне проекта. Однако вы можете настроить вкладку проблем, чтобы подавлять предупреждения из файлов или пакетов. Перейдите в меню «Конфигурация содержимого» и работайте с областью «On working set:».
Начиная с версии 3.8 M6, Eclipse (а именно: JDT) имеет встроенные функции для этого. Он настраивается через путь сборки проекта: Свойства проекта> Путь сборки Java> Компилятор> Источник
[/g3]
Объявлено здесь: Eclipse 3.8 и 4.2 M6 - Новые и примечательные , называемые выборочно игнорируют ошибки / предупреждения из исходных папок. Это также, где снимок экрана. Это новая функция, разработанная на ранее связанном Bug 220928 .
Я думаю, что самое лучшее, что вы можете сделать, это включить специальные настройки проекта для отображения предупреждений.
Окно -> Настройки -> Java -> Компилятор -> Ошибки / предупреждения
blockquote>В верхней части формы находится ссылка для настройки конкретных параметров проекта.
Я делаю это с несколькими ANTLR-грамматиками, которые генерируют парсер Java, используя Ant. Скрипт сборки Ant добавляет @SuppressWarnings("all")
к одному файлу Java, а @Override
- к нескольким методам в другом. Я могу посмотреть, как это делается в точности, если вам интересно.
В случае ANTLR 2 можно подавить предупреждения в сгенерированном коде appenidng @SuppressWarnings
перед объявлением класса в файле грамматики, например
{@SuppressWarnings("all")} class MyBaseParser extends Parser;
Прошло некоторое время с тех пор, как я выпустил плагин для очистки предупреждений, а теперь, когда я использую Eclipse 3.8, мне больше не нужно. Тем не менее, для тех, кому еще нужен этот плагин, я выпустил его на github с сайтом обновлений на bintray. Если вы все еще используете Eclipse 3.7 или раньше, это может быть полезно. Проверьте этот сайт для деталей установки.
Этот небольшой скрипт 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.')
Я не думаю, что Eclipse по своей сути обеспечивает способ сделать это на уровне каталогов (но я не уверен).
Вы могли бы сгенерировать файлы в отдельный проект Java и контрольные предупреждения для этого конкретного проекта.
Я вообще предпочитаю размещать автоматически сгенерированный код в отдельном проекте.
^(@SuppressWarnings\(.*?\)\s+)?public class
. Включая аннотацию в шаблоне, она не дублируется, если она уже существует. – Silly Freak 24 December 2011 в 15:15${basedir}/
доtarget
в теге<include>
. Чувствует себя странным, но поскольку он работает только с сгенерированными файлами, я возьму его! – Rob 19 January 2017 в 20:47