2016-05-04 56 views
0

私は、Javaモデル(IProjectICompilationUnitなど)で簡単に設定できないという意味で、Eclipseプラグインの外でJDTのASTParserを使用しようとしています。代わりに、ASTParser.setEnvironment(classpathEntries, sourcepathEntries, encoding, includeVMPath)を使用する必要があります。理論的にはうまくいくはずですが、ソースパスとクラスパスを動作させることはできません。ASTParserの設定環境を手動で

これはどの引数を正確に取りますか?私は、クラスパスのJARの絶対パスと、すべてのソース(.java)ファイルの絶対パスを想定しています。ただし、以下は動作しません(下記のエラー):

public static void main(String[] args) { 
    String[] sourceFilePaths = new String[] {"C:\\Users\\Aljoscha\\Desktop\\workspaceba\\ExampleProject\\src\\examplepackage\\ExampleClass.java"}; 

    String[] classpathEntries = new String[] {"C:\\Program Files\\Java\\jdk1.8.0_31\\src.zip"}; 
    String[] sourcepathEntries = new String[] {"C:\\Users\\Aljoscha\\Desktop\\workspaceba\\ExampleProject\\src\\examplepackage\\ExampleClass.java"}; 

    ASTParser parser = ASTParser.newParser(AST.JLS8); 
    parser.setResolveBindings(true); 
    parser.setBindingsRecovery(true); 
    parser.setEnvironment(classpathEntries, sourcepathEntries, null, false); 

    MyFileASTRequestor requestor = new MyFileASTRequestor(); 

    parser.createASTs(sourceFilePaths, null, null, requestor, null); 
} 

私に次のエラー与えること:

Exception in thread "main" java.lang.IllegalStateException: invalid environment settings 
at org.eclipse.jdt.core.dom.ASTParser.getClasspath(ASTParser.java:261) 
at org.eclipse.jdt.core.dom.ASTParser.createASTs(ASTParser.java:993) 
at asg.Foo.main(Foo.java:22) 

を誰もがsetEnvironment()関数に渡すために何を知っていますか?

+1

'sourcepathEntries'変数はおそらくディレクトリのみを含むべきです。例えば。 「C:\\ Users \\ Aljoscha \\ Desktop \\ workspaceba \\ ExampleProject \\ src」「 – sevenforce

答えて

1

classpathEntriessourcepathEntriesは、JARまたはZIPのフォルダである必要があります。

ところで、bindingKeysparser.createASTs(...)は、nullであることはできません。

+0

ありがとう、私は再び私のデスクトップ上で作業することができますこれをチェックアウトします。バインディングについて:APIドキュメントはこのパラメータでは多少不明です:どのバインディングが解決/生成されるか、あるいはどれがASTRequestorに与えられるかを制御しますか?私は、ASTをトラバースし、必要に応じてresolveBinding()メソッドを呼び出すことができますが、すべての必要なバインディングを持つためにASTが必要です。 –

+0

私はJDT APIに慣れていません。答えは、あなたのコードを実行し、Eclipseの設定をチェックした後の私のコンカッションです。私のテストの間、JDTは 'classpathEntries/sourcepathEntries'のjar /フォルダが存在しなくても例外をスローしません。しかし、 'bindingKeys'がnullの場合、NPEを投げます。 –