2014-06-27 3 views
0

Я делаю динамическую компиляцию с использованием jdk1.6-компилятора API.
На данный момент я просто сбросил все файлы jar, необходимые на диск, чтобы включить их в classpath при компиляции.
Есть ли какой-то трюк, чтобы напрямую помещать файлы jar в память в classpath?
Мне не удалось выяснить, как это сделать, расширив javax.tools.ForwardingJavaFileManager.
Может ли кто-нибудь дать мне несколько советов?
Спасибо.Как поместить файл jar в память в classpath при компиляции с jdk1.6-компилятором API?

ответ

0

Прочитайте here о том, как добавить файлы jar в свой путь класса, используя манифест.

В вашей фляге должна быть папка META-INF, файл Manifest.mf должен находиться в этой папке с флягой.

Существует также возможность поставить файлы jar в JAVA_HOME/lib/ext, но это плохая практика. JRE может использоваться многими другими приложениями, кроме ваших, и им не нужно иметь свои классы в своем пути к классам.

+0

Что это нужно делать с проставлением JAR-файлы **, которые находятся в памяти ** на пути к классам? –

+0

Мои файлы jar находятся в памяти. Я могу получить их входные потоки, но я не хочу записывать их на диск. Итак, как я могу поместить эти файлы jar памяти в classpath напрямую? –

+0

У вас может быть загружен пользовательский загрузчик классов из памяти. Вы можете заставить загрузчик системы загружать указанные классы из памяти. Однако вы не можете изменить загрузчик по умолчанию, чтобы читать данные из памяти «на лету». –

0

Я написал свой собственный FileManager, который полностью находится в памяти. Используя этот подход, можно загружать и даже писать результаты в в памяти «файловой системы»

https://github.com/OpenHFT/Java-Runtime-Compiler/blob/master/compiler/src/main/java/net/openhft/compiler/MyJavaFileManager.java

+0

На самом деле, у меня уже есть тот же файловый менеджер, что и ваш. Это может сделать динамическое чтение исходного кода и динамический класс, генерирующий все в памяти. Но при чтении jar-файлов класса path этот файловый менеджер также делегирует это действие StandardJavaFileManager, который может читать только файлы jar-файлов класса на жестком диске. Итак, я до сих пор не знаю, как включить файлы jar памяти в classpath. –