2013-06-12 3 views
0

Я использую инструменты из API компилятора (javax.tools.JavaCompiler) для динамически генерируемого байт-кода Java. Я создаю исходный код и использую API для его компиляции, а затем использую его с помощью рефлексии.Javac: игнорирование «должно быть объявлено в файле с именем ...»

Это прекрасно, если я только попробую создать непубличные классы. Если я это сделаю, я получаю «класс MyClass является общедоступным, должен быть объявлен в файле с именем MyClass.java», что совершенно нормально, его не компилируют из файла Java.

Я ищу способ обойти эту ошибку, не найти ни одного из вариантов Java и API.

ответ

1

Проверить эту статью: Create class from string

Для меня, используя "строку: ///" решить эту проблему.

, как это описано здесь http://www.javablogging.com/dynamic-in-memory-compilation/

+0

Ну, я пытался повторно запустить свой код поколения ... и это работает прекрасно. Я не знаю точно, что я изменил в своей библиотеке компиляции с тех пор, но я не могу воспроизвести эту ошибку. Во всяком случае, ваши ссылки отличные (что-то похожее на второе). – PomPom