Eclispe API - Как получить местоположение родительского проекта

Как получить родительский модуль проекта. Вот мой код отлично работает в Eclipse PDE. Но когда я тестирую плагин (устанавливая в eclipse) с помощью тестового приложения, выбирая дочерний модуль, это условие (if (projectRoot == selectedResource)) сбывается и возвращает src и target как дочерние модули, что неверно. Любое предложение о том, как получить родительский модуль проекта.

IResource selectedResource = Resource.getSelectedProject(); // this return selected module (F/parent/child1)
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();  // \R
// this is not returning parent module??
IProject projectRoot = root.getProject(selectedResource.getProject().getName()); 
List<IResource> childModules = new ArrayList<>();

if (projectRoot == selectedResource) { // this is coming true (parent != child)
    IProject project = FileResource.getProject(selectedResource);
    childModules = Resource.getChildModules(project);
} else {
    childModules.add(selectedResource);
}

Ресурс.Класс

private static IResource selectedResource;

public static void setSelectedResource(IResource resource) {
    selectedResource = resource;
 }

public static IResource getSelectedProject() {
    return selectedResource;
 }

При чем тут "Ресурс"?

nitind 10.10.2022 16:30

@nitind текущий выбранный проект

Maana 10.10.2022 16:34

Я имел в виду его тип.

nitind 10.10.2022 16:35

Тип @nitind — IResource.

Maana 10.10.2022 16:38
IResource не имеет getSelectedProject метода. Какой тип Resource?
nitind 10.10.2022 16:40

@nitind обновил вопрос Ресурс - это класс

Maana 10.10.2022 16:44

@ greg-449 есть предложения по этому поводу?

Maana 10.10.2022 17:16

Что вы подразумеваете под «модулем» - это не термин, который используют основные API-интерфейсы Eclipse. Ресурсы всегда находятся только в одном проекте, и getProject в проекте возвращает тот же проект, поэтому правильно, что == возвращает true.

greg-449 10.10.2022 17:27

@greg-449 Под модулями здесь подразумеваются подпапки. Итак, getProject возвращает тот же проект, как я могу получить корневой проект?

Maana 10.10.2022 17:39

@ greg-449 greg-449 Я хочу сравнить родительское местоположение (P/parent) с местоположением выбранного проекта (F/parent/child1) (projectRoot == selectedResource). Это сбывается, значит, мой родительский проект настроен неправильно.

Maana 10.10.2022 17:50

Я имею в виду для данного проекта, как я могу получить местоположение p/parent

Maana 10.10.2022 17:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
11
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рабочее пространство Eclipse организовано следующим образом:

IWorkspaceRoot
 - IProject
   - mixture of IFolder and IFile
 - IProject
   - mixture of IFolder and IFile
 - ... more IProjects

IFolder, в свою очередь, может содержать смесь большего количества ресурсов IFolder и IFile.

IWorkspaceRoot, IProject и IFolder все расширяют IContainer. IContainer и IFile расширяют IResource.

Метод IResource.getProject всегда возвращает верхний IProject ресурс (кроме IWorkspaceRoot).

IResource.getParent возвращает непосредственного родителя IContainer (ноль для IWorkspaceRoot)

Итак, если вам нужен родительский контейнер вызова ресурса IResource.getParent, если вам нужен верхний уровень, содержащий вызов проекта IResource.getProject.

Быстрый вопрос здесь, поэтому для данного проекта, у которого есть подмодуль (определенный в родительском pom.xml), этот подмодуль будет IProject или IFolder. Например ниже. Студент //IPoject и его подмодуль — это отдел, будет ли это Ifolder или IProject?

Maana 11.10.2022 17:37

Модули maven не имеют ничего общего с API-интерфейсами Eclipse, это совершенно не связанные вещи. Если вы хотите работать с maven pom.xml, используйте API-интерфейсы maven.

greg-449 11.10.2022 18:34

На самом деле, я тестирую свой плагин Eclipse API в проекте на основе maven.

Maana 11.10.2022 19:07

Хорошо, но это не означает, что модули вообще связаны с IFolder/IPoject. maven просто видит папки файловой системы, некоторые из них могут быть IFolders, некоторые могут быть IProjects.

greg-449 11.10.2022 19:21

Спасибо за разъяснение Грег

Maana 11.10.2022 19:46

Тип @Maana IFolder/IPoject является общим для всех типов проектов и не относится только к проектам Maven. Если вы хотите отфильтровать тип проекта maven, вам, возможно, придется написать для этого собственные условия.

Subash J 13.10.2022 12:23

@Maana по дополнительным вопросам вы можете связаться со мной через LinkedIn linkedin.com/in/subashjanarthanan

Subash J 21.11.2022 09:07

Другие вопросы по теме