2016-12-27 8 views
0

Я пишу плагин eclipse. В плагине я написал функцию, которая может создать для меня командную строку. Строка содержит «-cp jar_path». Путь jar настраивается с помощью кнопки eclipse «добавить банки» (в конфигурации свойств проекта «добавить банки» находится в «java build path -> libraries».). Мне нужно получить абсолютный путь к файлам jar, но используя «добавить банки», я могу получить только относительный путь, используя следующий код. Я знаю, что использование «добавить внешние банки» в порядке, но я должен сделать «добавить банки» тоже. Есть ли какие-то подходы? Другой вопрос: если вы щелкните правой кнопкой мыши добавленную банку в разделе «ссылки на библиотеки» и нажмите «показать в -> свойства», IDE может получить абсолютное местоположение баннера. Я думаю, что, возможно, IDE получит его из workspace/.metadata/.plugins/com.eclipse.core.resources/.projects. Но даже если это правда, я до сих пор не могу напрямую читать эти файлы, потому что формат не может быть проанализирован общим читателем.При разработке плагина eclipse я могу получить абсолютный путь к файлам jar с помощью «Добавить банки»?

IPackageFragmentRoot[] roots = JavaCore.create(project).getPackageFragmentRoots(); 
for(IPackageFragmentRoot root : roots) 
{ 
    IClasspathEntry entry = root.getResolvedClasspathEntry(); 
    if(IClasspathEntry.CPE_LIBRARY == entry.getEntryKind()) 
    {  
     root.getRawClasspathEntry(); 
     String cp = entry.getPath().toOSString(); 
    } 
} 
+0

Это довольно трудно следовать. Что такое кнопка «Добавить баночки»? Покажите нам какой-то код. –

+0

Измените свой вопрос и поместите здесь код и другие данные. –

+0

Класс 'IProject' является интерфейсом к информации в метаданных' .projects'. –

ответ

0

Если у вас есть относительный путь workpace вы можете преобразовать его в абсолютное местоположение, используя что-то вроде:

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 

IPath rootPath = root.getLocation(); 

IPath fullPath = rootPath.append("/project/container/file"); 
0
solved by myself, thank you, greg-449! 
String cp; 
if (root.isArchive() && root.isExternal()) 
    cp = root.getResolvedClasspathEntry().getPath().toOSString(); 
else if (root.isArchive() && !root.isExternal()) 
    cp = root.getResource().getLocation().toString();