#java #maven #eclipse-plugin #eclipse-rcp #m2eclipse
#java #maven #eclipse-плагин #eclipse-rcp #m2eclipse
Вопрос:
У меня есть проект maven. И я хочу перебрать его проекты зависимостей jar и прочитать в них некоторые файлы свойств. С помощью eclipse resource api я могу получить экземпляр IProject в workspace и получить доступ к его файлу classpath.
Путь к классу имеет следующую структуру.
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
Как я могу извлечь из этого фактические местоположения jar зависимостей?
вместо этого я ожидал чего-то подобного
<classpath>
<classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
<classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
</classpath>
2. Или есть какой-нибудь лучший подход, чем этот, для программного чтения через банки зависимостей maven?
Ответ №1:
getResolvedClasspath
Метод IJavaProject
имеет дело с разрешением контейнеров:
IProject project = ... get project
IJavaProject javaProject = JavaCore.create(project);
IClasspathEntry[] classPathEntries = javaProject.getResolvedClasspath(true);
JavaDoc говорит:
Это вспомогательный метод, возвращающий разрешенный путь к классу для проекта в виде списка простых (непеременных, неконтейнерных) записей пути к классу. Все записи переменной classpath и контейнера classpath в необработанном classpath проекта будут заменены простыми записями classpath, к которым они разрешаются.
Комментарии:
1. Кажется, так и нужно поступить. Попробую это. Спасибо.
2. Привет, можно ли получить доступ к файлам внутри записей пути к классам (банки зависимостей) как экземпляр iFile. ? Записи пути к классам на самом деле не находятся внутри рабочей области, не так ли. В моем случае мой заинтересованный находится внутри моего локального хранилища maven. Каков наилучший подход для доступа к этому файлу как iFile?
3. Или еще способ получить доступ к этой банке зависимостей как IProject?
4. Если их нет в рабочей области, вы не можете получить к ним доступ как к iFiles или IProject.
5. В таком случае, знаете ли вы, как мы могли бы получить доступ к файлам внутри записей пути к классам (jar-файлы)? Я пытался это сделать, но не сработало.
for (IClasspathEntry classpathEntry: classPathEntries) { InputStream is = classpathEntry.getClass().getClassLoader().getResourceAsStream("META-INF/Packages.xml");}