2015-02-22 5 views
0

У меня есть необходимость создания IFolder в абсолютном местоположении. Обычно у меня есть класс, который выполняет «сборку» (или, по крайней мере, то, что я называю «сборкой») для меня в рабочей области. IFolder для наращивания целевых папки возвращается методом, как это:Eclipse IFolder от абсолютного пути

public IFolder getTargetFolder(IProject project){ 
    return project.getFolder("build"); 
} 

Теперь я создал подкласс этого для «развертывания» (в директории с абсолютным идентификатором). Этот подкласс включает те же функции, но getTargetfolder процедура должна быть так:

@Override 
public IFolder getTargetFolder(IProject project){ 
    IPath path = new Path("M:\\Path\\To\\My\\Deployment\\Directory\\"); 
    IFolder target = project.getFolder(path); 
    return target; 
} 

Однако, я бегу в проблемы, и я, кажется, не получить ручку на папке и исключение, говорит папка (<ProjectRoot>/Path/To/My/Deployment/Directory) делает не существует. Как я могу указать, что это не должно относительный путь?

ответ

1

Имя, присвоенное project.getFolder(), должно быть . Имя папки-участника (см. JavaDoc). Вы не можете получить доступ к файлу или папке с помощью API ресурсов, который находится за пределами рабочей области. Если же M:\\... путь лежит в пределах проектов, который является частью рабочей области, то вы можете решить эту папку через IWorkspaceRoot#getContainerForLocation()

Например:

IContainer container = project.getWorkspace().getRoot().getContainerForLocation("M:\\..."); 

Возвращенный container может быть либо IProject или IFolder. Но учтите, что возвращаемый контейнер не обязательно лежит внутри project.

Некоторые более подробную информацию можно найти в Resources and the file system

+0

спасибо до сих пор. вы считаете, что это работает, если это относительный путь на одном диске? т. е. можно ли перемещаться по корню через '../../../.......', а затем переходить в другую папку? – stklik

+0

Нет, файл или папка должны быть _known_ в рабочей области, то есть должны быть в рамках проекта или [связаны] (http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse. platform.doc.user% 2Fconcepts% 2Fconcepts-13.htm) оттуда. Вы можете пересмотреть общий подход, который вы принимаете. Почему вы хотите использовать 'IFolder' для создания каталога _deployment build_, если он все равно не распознается рабочей областью. Почему бы вам не создать каталог с hte API-интерфейсом Java? –

+0

Причина заключается в том, чтобы избежать двойных реализаций. У меня уже есть локальная сборка и тестирование. Я хотел бы предоставить удобную функцию, которая позволяет выполнять тесты и развертывать за один раз. Моя локальная сборка рекурсивно использует IResources, и я подумал, что было бы неплохо элегантно предоставить другой IFolder вместо перемещения файлов после локальной сборки и «перенаправления» ссылок. – stklik

Смежные вопросы