Я думаю, что это положение вы описываете ...
У вас есть плагин, который вы хотите Eclipse, Java (JDT) пользователей для установки. В своих проектах Java вы хотите, чтобы они могли использовать некоторые из классов Java в вашем плагине.
В Java класс должен быть найден на пути к классам загрузчиком классов. JDT управляет classpath для проектов через «контейнеры путей класса». Первый пример этого - когда вы создаете проект Java, JDT добавит «Системную библиотеку JRE» в качестве контейнера. Вы можете увидеть его в проекте в Проводнике пакетов.
Другим примером этого является плагин JUnit. Вы заметите, что при первом добавлении тестового примера JUnit к проекту JDT в диалоговом окне задается вопрос о добавлении библиотеки JUnit в путь сборки. (Это явное поведение мастера создания нового файла плагина JUnit.) Если вы согласны, вы увидите контейнер JUnit 4 в Проводнике пакетов.
Еще один пример: PDE расширяет то, что делает JDT. Когда вы создаете проект Plugin, PDE добавляет контейнер «Plug-in Dependencies», который управляет на основе зависимостей плагина, которые вы декларируете в манифесте плагина.
Пользователи могут создавать и ссылаться на свои собственные контейнеры классов для своих любимых библиотек.
Но, конечно, как поставщик библиотеки, вы хотите дать им один, как плагин JUnit. Чтобы сделать это, в плагине:
- Добавить зависимость от JDT Ядра
- Продлить с этой точки расширения: org.eclipse.jdt.core.classpathContainerInitializer
Если вы хотите страницу мастера, чтобы создать или изменить запись пути к классам контейнера:
- Добавить зависимость от JDT UI
- Продлить с этой точки расширения:
org.eclipse.jdt.ui.classpathContainerPage
Некоторые плагины используют страницу мастера для настройки контейнера (JUnit позволяет выбирать JUnit 3 или 4); Другие просто используют страницу для предоставления информации о контейнере.
См. Документацию по документации JDT Setting the Java build path и перекрестные ссылки на исходный код любых примеров, знакомых вам.
Вот хорошая статья: Simplify Eclipse classpaths using classpath containers
Чтобы ответить на ваши вопросы:
- Вы должны добавить классы к классам, используя метод
initialize
вашего подкласса ClasspathContainerInitializer
.
- Да, методы, которые вы хотите, чтобы клиенты вызывали, должны быть общедоступными и быть членами классов, которые вы добавляете в путь к классам.