Добавить папку, которая содержит исходники Java, в classpath во время выполнения - PullRequest
2 голосов
/ 03 мая 2010

Можно ли добавить папку, которая содержит исходный код Java в качестве элемента classpath. Я пробовал несколько вещей, и кажется, что classloadr не собирает файлы Java-Soruce? Одна из моих попыток показана ниже ....

File uncompressedSrc = new File("uncompressed" + File.separator + "src" + File.separator);
URL uncompressedSrcURL = null;
try {
    uncompressedSrcURL = new URL("file://"
        + uncompressedSrc.getAbsolutePath());
} catch (MalformedURLException e) {
    e.printStackTrace();
}
URL elements[] = { uncompressedSrcURL };
new URLClassLoader(elements, ClassLoader.getSystemClassLoader());

Ответы [ 3 ]

2 голосов
/ 03 мая 2010

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

public static void addUrl(URL u) {
    URLClassLoader sysloader = (URLClassLoader) ClassLoader
            .getSystemClassLoader();
    Class<URLClassLoader> sysclass = URLClassLoader.class;

    try {
        Method method = sysclass.getDeclaredMethod("addURL", parameters);
        method.setAccessible(true);
        method.invoke(sysloader, new Object[] { u });
    } catch (Throwable t) {
        t.printStackTrace();
        try {
            throw new IOException(
                    "Error, could not add URL to system classloader");
        } catch (IOException e) {
            logger.log(Level.SEVERE, e.getMessage());
        }
    }
}
1 голос
/ 03 мая 2010

Исходный код Java - это то, что JVM не может обработать самостоятельно. Загрузчик классов может загружать только скомпилированные файлы классов. Таким образом, вы можете добавлять только содержимое JAR-файлов или CLASS-файлов в classpath.

1 голос
/ 03 мая 2010

Извините. Я пролистал твой вопрос быстро.

Как говорит @Daniel, JVM не может читать .java файлы, только .class файлы.

Java-файлы могут быть скомпилированы в файлы классов и загружены в JVM программно, как описано здесь: Программно компилировать и выполнять с Java

Ключевым ингредиентом является

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager filemanager = compiler.getStandardFileManager( null, null, null );

try {
    Iterable compilationUnits = filemanager.getJavaFileObjects( file );
    compiler.getTask( null, filemanager, null, null, null, compilationUnits ).call();

    filemanager.close();
} catch ( IOException e ) {
    e.printStackTrace();
}

Надеюсь, это поможет!

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