загружает javax.tools.JavaCompiler в URLClassLoader, родительским элементом которого является системный загрузчик классов. API, похоже, не позволяет пользователям указывать родительский загрузчик классов. Как можно использовать javax.tools.JavaCompiler из пользовательского загрузчика классов?
Например:
Поскольку эти два класса располагаются в отдельных загрузчиках классов, похоже, у MyParserTask нет способа взаимодействовать с JavacTask > без ошибок ClassCastException.
Кажется, невозможно использовать javax.tools.ToolProvider из пользовательского загрузчика классов, как того требует Ant или Webstart: https://bugs.java.com/bugdatabase/view_bug?bug_id=6548428 [code]javax.tools.ToolProvider.getSystemJavaCompiler()[/code] загружает javax.tools.JavaCompiler в URLClassLoader, родительским элементом которого является системный загрузчик классов. API, похоже, не позволяет пользователям указывать родительский загрузчик классов. [b]Как можно использовать javax.tools.JavaCompiler из пользовательского загрузчика классов?[/b] Например: [list] [*]Ant загружает MyParserTask [*][code]MyParserTask[/code] анализирует исходный код Java [*][code]MyParserTask[/code] загружается AntClassLoader, который делегирует системному загрузчику классов [*][code]javax.tools.JavaCompiler[/code] загружается URLClassLoader, который делегирует системному загрузчику классов [/list] В дальнейшем MyParserTask вызывает:< /p> [code]javax.tools.CompilationTask task = compiler.getTask(...); com.sun.source.util.JavacTask javacTask = (com.sun.source.util.JavacTask) task; javacTask.parse().next().accept(visitor, unused); // parsing happens here [/code] [list] [*]Поскольку эти два класса располагаются в отдельных загрузчиках классов, похоже, у MyParserTask нет способа взаимодействовать с JavacTask > без ошибок ClassCastException. [/list] Есть идеи?