2016-05-04 2 views
0

Я пытаюсь использовать JDT's ASTParser вне плагина eclipse, что означает, что я не могу легко настроить его через Java-модель (IProject, ICompilationUnit и т. Д.). Вместо этого мне нужно использовать ASTParser.setEnvironment(classpathEntries, sourcepathEntries, encoding, includeVMPath). Что должно быть хорошо в теории, но я не могу заставить sourcepaths и classpaths работать.Настройка 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

classpathEntries и sourcepathEntries должны быть папкой, JAR или ZIP.

BTW, параметр bindingKeysparser.createASTs(...) не может быть null.

+0

Спасибо, я проверю это, как только я снова смогу работать на своем рабочем столе. Что касается привязок: API-документы API несколько неясны в отношении этого параметра: управляет ли этот контроль, какие привязки разрешены/сгенерированы или какие именно данные предоставляются ASTRequestor? Я в порядке с пересечением AST и вызовом методов resolveBinding() по мере необходимости, но мне нужен AST, чтобы иметь все необходимые Bindings. –

+0

Я не знакомый с JDT API. Ответ - это мой результат после запуска кода и проверки конфигурации в Eclipse. Во время моего тестирования JDT не генерирует исключение, даже jar/folder 'classpathEntries/sourcepathEntries' не существует. Но он будет бросать NPE, если 'bindingKeys' равно null. –

Смежные вопросы