Как мне получить classpath в виде путей к файлам IJavaProject в плагине Eclipse? - PullRequest
2 голосов
/ 02 марта 2011

Я работаю над плагином Eclipse, который должен создать загрузчик классов, который может получить доступ ко всем вещам в пути к классам проекта в Eclipse.У меня есть IJavaProject, и я пытаюсь создать список URL-адресов для передачи URLClassLoader:

final IClasspathEntry[] resolvedClasspath = javaProject.getResolvedClasspath(true);
for (IClasspathEntry classpathEntry : resolvedClasspath) {
    urls.add(classpathEntry.getPath().makeAbsolute().toFile().getCanonicalFile().toURL());
}

Но любая зависимость проекта (либо добавлена ​​вручную, либо в контейнере "Maven Dependencies" изПлагин Maven) отображается как просто «file: / projectName», а не как абсолютный путь.

Другие эксперименты были связаны с использованием javaProject.getAllPackageFragmentRoots (), но, похоже, это не включает зависимости проекта внутриКонтейнер "Maven Dependencies".

1 Ответ

5 голосов
/ 02 марта 2011

Вызов makeAbsolute () не учитывает контекст. Это просто добавляет ведущий "/".

Вам необходимо проверить, является ли путь абсолютным (IPath.isAbsolute ()). Если не абсолютный, вызовите IProject.getLocation (), чтобы получить корень проекта и объединить два пути.

СОВЕТ: UrlClassLoader заблокирует все jar-файлы на время существования загрузчика этого класса. Это может привести к проблемам у пользователей вашего плагина, так как они не смогут удалять или менять файлы jar, пока ваш плагин активен. Я видел несколько обходных путей для этого. Наиболее эффективный подход - сначала скопировать jar-файлы во временную папку и создать загрузчик классов с копиями. Затем вы можете отслеживать исходные файлы jar и обновлять свои копии и загрузчик классов, не рискуя заблокировать контролируемые пользователем файлы.

...