Используйте пользовательский загрузчик классов во время компиляции - PullRequest
4 голосов
/ 03 июня 2009

Можно ли указать пользовательский загрузчик классов для javac (или некоторый альтернативный компилятор java)?

Мне бы очень понравился такой подвиг, потому что он позволил бы мне компилировать классы, использующие классы, которые обнаружены только моим специальным загрузчиком классов.

Для любопытных: я бы написал загрузчик классов, который подключается к базе данных и создает классы на основе найденных таблиц.

Ответы [ 6 ]

5 голосов
/ 03 июня 2009

Когда вы запускаете javac, вы можете указать загрузчик классов следующим образом:

javac -J-Djava.system.class.loader=org.awesome.classloader sourcefile.java
4 голосов
/ 03 июня 2009

Может быть возможно инициализировать пользовательский загрузчик классов и затем использовать его при вызове нового API компилятора Java 6 в javax.tools .

1 голос
/ 03 июня 2009

Я знаю только два способа подключения напрямую к javac (как запускается из командной строки) через процессор аннотаций или специфичный для компилятора хак .

0 голосов
/ 04 июня 2009

Если все классы соответствуют одному и тому же интерфейсу, вы можете просто указать это во время компиляции.

Если нет, то я не вижу, что вы получаете, не выводя файлы .java на основе БД и не компилируя их.

0 голосов
/ 03 июня 2009

Взгляните на ClassLoader.defineClass . Я сам использовал его для загрузки плагинов в созданную мной программу, в которой я загрузил байты файла в новый класс.

0 голосов
/ 03 июня 2009

Просто чтобы расширить ответ Михаэля, если вы не можете использовать Java6, посмотрите на солнце. пакеты - они всегда были доступны для java-приложений и всегда имели компилятор, это просто не стандартная Java, поэтому вы не много слышите об этом, и API может быть изменен (например, перемещен в javax.tools пакет!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...