回答:
バージョン3.8 M6以降、Eclipse(正確にはJDT)には、このための機能が組み込まれています。プロジェクトのビルドパスを使用して構成できます。プロジェクトのプロパティ> Javaビルドパス>コンパイラ>ソース
ここで発表:Eclipse 3.8および4.2 M6-New and Noteworthyと呼ばれ、ソースフォルダーからのエラー/警告を選択的に無視します。また、スクリーンショットの元でもあります。これは、以前にリンクされたBug 220928で開発された新機能です。
これのチケット、Bug 220928があり、それ以降Eclipse 3.8で完成しました。詳細については、この回答をご覧ください。
Eclipse 3.7以前で立ち往生している場合:そのチケットにコメントするユーザー「Marc」が、コメント35に「warningcleaner」というプラグインを作成(または少なくともリンク)しました。この機能がEclipseに統合されるのを待つ間、私はそれを大成功で使用しています。
とても簡単です。
私はmaven regexp replaceプラグインを使用してこれを解決しました-それは原因を解決しませんが、痛みを癒します:
<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を生成しない方法の改善については、以下のコメントを参照してください
^(@SuppressWarnings\(.*?\)\s+)?public class
。アノテーションをパターンに含めることにより、すでにそこにある場合は複製されません。
${basedir}/
以前target
に<include>
タグに追加しなければならなかった。少しぎこちない感じがしますが、生成されたファイルでしか機能しないため、私はそれを採用します!
ユーザー@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の<replace>は正規表現の置換ではなくテキストの置換を行うため、maven regexp replaceプラグインが行うようにトークンの^メタ文字を使用して行の先頭を照合することはできません。
ANTLR mavenプラグインがCobertura mavenプラグインでうまく機能しなかったため、Maven pomでmaven-antrun-pluginからAntlrを実行するのと同時にこれを行っています。
(これは元の質問に対する回答ではないことに気づきましたが、コメント内のAntコードをフォーマットしたり、別の回答に返信したりすることはできません。回答内でのみ)
警告は、プロジェクトレベルでのみ抑制できます。ただし、問題タブを設定して、ファイルまたはパッケージからの警告を抑制することができます。[コンテンツの構成]メニューに移動し、 "On working set:"スコープを操作します。
私はこれを、Antを使用してJavaパーサーを生成するいくつかのANTLR文法に対して行っています。Antビルドスクリプトは、@SuppressWarnings("all")
1つのJavaファイルと@Override
、別のJavaファイルのいくつかのメソッドにを追加します。興味があれば、それがどのように行われるかを正確に調べることができます。
この小さなpythonスクリプトは、M2Eで生成された.classpath
ファイルを「パッチ」し、で始まるすべてのソースフォルダーに必要なXMLタグを追加しますtarget/generated-sources
。プロジェクトのルートフォルダから実行できます。明らかに、M2EからEclipseプロジェクト情報が再生成された場合、それを再実行する必要があります。そして、すべてあなた自身のリスクで、明らかに;-)
#!/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.')
ANTLR 2の場合@SuppressWarnings
、文法ファイルのクラス宣言の前にappenidngを実行することにより、生成されたコードの警告を抑制することができます。たとえば、
{@SuppressWarnings("all")} class MyBaseParser extends Parser;
これは、ビルドパスから特定のディレクトリを除外することで実行できます(次の例はEclipse 3.5を使用
して提供されています)
[1] Javaビルドパスを表示します
[2]除外するディレクトリを追加
EclipseプロジェクトがEclipseプラグインの eclipse
コマンドを使用してGradleから生成されているSelectively ignore errors/warnings from source folders
場合、オプションを設定するには、build.gradle
ファイルの最上位にこれを追加します。
eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.each { entry ->
if (entry.path.contains('build/generated/parser')) {
entry.entryAttributes['ignore_optional_problems'] = true
}
}
}
}
これは、生成されたソースがbuild/generated/parser
フォルダーにあることを前提としています。