Как программно импортировать пользовательские библиотеки из файла

#eclipse #eclipse-plugin

#eclipse #eclipse-плагин

Вопрос:

У меня есть файл «myUserLib.userlibraries» со всеми определенными пользовательскими библиотеками, которые требуются. Как часть моего плагина, который я разработал (это позволит создавать веб-проекты и требуемые настройки), я хочу импортировать этот файл в проекты, созданные плагином.

Существует ли какой-либо программный способ импортировать библиотеки из файла?

Ответ №1:

Если вы разрабатываете плагин для добавления этих библиотек в project classpath, я рекомендую вам рассмотреть возможность написания пользовательского контейнера classpath, а не повторного использования средства пользовательских библиотек. Если вы пишете пользовательский контейнер, project classpath будет включать идентификатор вашего контейнера, и JDT запросит ваш код во время выполнения, чтобы получить фактический список записей classpath.

Это избавит вас от необходимости хранить и поддерживать содержимое вашей библиотеки в настройках workspace, как вам пришлось бы делать, если бы вы использовали подход user library.

Смотрите org.eclipse.jdt.core.Класс IClasspathContainer.

Комментарии:

1. Спасибо, Константин. Мне нужно было бы просто импортировать мои пользовательские библиотеки программно так же, как мы импортируем через настройки. Мне не нужно добавлять их в classpath. Потому что у меня есть десятки библиотек, определяющих мой файл, но не все проекты собираются использовать их все. После импорта у меня есть вторая задача, в которой мне нужно добавить необходимые ссылки на библиотеки в соответствующие проекты. Я могу использовать classpathContainer для своей второй части

2. Я не думаю, что вы понимаете, что такое контейнеры classpath. Средство Eclipse user library — это всего лишь один тип контейнера classpath, основанный на определении библиотеки, поддерживаемом в настройках workspace. Я предлагаю вам реализовать свою собственную, поскольку это позволило бы вам обойти этап импорта содержимого в метаданные рабочей области, чтобы заставить ваш плагин работать. Идентификатор контейнера classpath — это путь. Первый сегмент — это его тип, но остальное зависит от вас. Вы можете использовать оставшуюся часть пути к контейнеру, чтобы указать, какое определение «библиотеки» следует искать внутри вашей логики плагина.

3. Я этого не знал. Спасибо за ваше терпение при повторном объяснении. Я думал, что это две разные вещи. Если я смогу достичь этого с помощью IClasspathContainer, это было бы здорово. Я использовал контейнер classpath для добавления отдельных. файлы jar в classpath. Я сделаю так, как вы предложили, и верну результат.

4. Но у меня все еще есть некоторые сомнения. Я могу добавить ссылку на библиотеку в classpath. Как бы я определил библиотеку. Поскольку одна из моих библиотек (например. В MYPROJECT_LIB) определено 30 файлов jars, аналогично существует больше библиотек. Но я могу добавить ссылку на библиотеку только с помощью контейнера classpath, но что, если такая библиотека не определена. Мой вопрос в том, как я могу создать определение библиотеки и добавить 30 ссылок на jar? Я не хочу создавать все библиотеки и добавлять jar-файлы один за другим программно. Вот здесь мне нужна помощь. все это скопировано в файл, и мне нужно просто импортировать для определения библиотек.

5. Ваша реализация контейнера classpath может управлять вашим списком jar, однако это наиболее удобно для реализации. У вас может быть жестко заданный список, вы можете прочитать файл и т.д. Ваш контейнер просто попросят предоставить отдельные записи classpath. Как вы это сделаете, зависит от вас.

Ответ №2:

Наконец-то у меня получилось так, как я хочу. Теперь я могу программно загружать библиотеки пользователей в настройки рабочей области из файла «myuserlibs.userlibraries». Я использовал следующие классы плагинов eclipse.

 org.eclipse.jdt.internal.core.UserLibrary.class
org.eclipse.jdt.internal.core.UserLibraryManager.class
org.eclipse.jdt.internal.core.UserLibraryClasspathContainer.class
org.eclipse.jdt.internal.core.UserLibraryClasspathContainerInitializer.class
  

У этих классов есть множество методов для решения этой задачи.

После того, как они были загружены в настройки, я также могу программно добавлять необходимые записи пользовательских библиотек в соответствующие проекты (созданные моим плагином). Потому что у меня в рабочей области около 8 веб-проектов, и всем им требовался разный набор пользовательских библиотек в их контейнере classpath.