Программное добавление библиотеки в проект Eclipse - PullRequest
7 голосов
/ 01 декабря 2010

Как я могу создать новую запись пути сборки для любого файла * .jar и добавить эту запись пути к классу в путь сборки проекта Eclipse.

У меня есть плагин, который должен автоматически настроить мой целевой проект. Таким образом, этот проект должен иметь некоторые библиотеки импорта, и я хочу добавить этот импорт автоматически с помощью мастера. Пользователь просто выбирает местоположение определенного SDK, а затем некоторые библиотеки должны быть связаны с целевым проектом.

Однако я нашел несколько ссылок:

Программный импорт библиотек в Eclipse

Как добавить папку в путь сборки java в виде библиотеки, содержащей несколько jar-файлов или записей?

К сожалению, мне не удалось реализовать второе решение, так как я не могу найти классы IClasspathContainer, JavaCore и IJavaProject.

Я использую Eclipse Helios и JDK. Нужны ли какие-либо дополнительные библиотеки для внесения изменений в путь сборки, или есть более простое решение для программного импорта библиотеки jar?

С уважением, Флориан

Ответы [ 4 ]

1 голос
/ 26 марта 2013

Здесь вы можете найти несколько примеров того, как определить новые записи classpath и контейнеры classpath для проектов java.Я думаю, это было бы удобно для тех, кто читает этот вопрос.

1 голос
/ 05 декабря 2010

Я предполагаю, что вы создаете плагин и вам нужен плагин для управления дополнительными банками, добавленными в classpath.

Как вы упоминаете, вам нужно создать собственный контейнер classpath.Сначала создайте расширение контейнера classpath, расширив эту точку расширения:

org.eclipse.jdt.core.classpathContainerInitializer

Затем создайте класс, который реализует org.eclipse.jdt.core.IClasspathContainer, и свяжите его с только что созданной точкой расширения.

Вы упоминаете, что не можете найти интерфейс org.eclipse.jdt.core.IClasspathContainer.Вы должны убедиться, что ваш плагин ссылается на плагин org.eclipse.jdt.core в его MANIFEST.MF.

0 голосов
/ 15 апреля 2017
String projectName = "MyProject"; // project to add a library to
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
IJavaProject jProject = JavaCore.create(project);

for(File file : new File("path-to-some-directory-of-libraries-to-add").listFiles()){
    if(file.isFile() && file.getName().endsWith(".jar")){
        addProjectLibrary(jProject, file);
    }
}

private static void addProjectLibrary(IJavaProject jProject, File jarLibrary) throws IOException, URISyntaxException, MalformedURLException, CoreException {
    // copy the jar file into the project
    InputStream jarLibraryInputStream = new BufferedInputStream(new FileInputStream(jarLibrary));
    IFile libFile = jProject.getProject().getFile(jarLibrary.getName());
    libFile.create(jarLibraryInputStream, false, null);

    // create a classpath entry for the library
    IClasspathEntry relativeLibraryEntry = new org.eclipse.jdt.internal.core.ClasspathEntry(
        IPackageFragmentRoot.K_BINARY,
        IClasspathEntry.CPE_LIBRARY, libFile.getLocation(),
        ClasspathEntry.INCLUDE_ALL, // inclusion patterns
        ClasspathEntry.EXCLUDE_NONE, // exclusion patterns
        null, null, null, // specific output folder
        false, // exported
        ClasspathEntry.NO_ACCESS_RULES, false, // no access rules to combine
        ClasspathEntry.NO_EXTRA_ATTRIBUTES);

    // add the new classpath entry to the project's existing entries
    IClasspathEntry[] oldEntries = jProject.getRawClasspath();
    IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
    System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
    newEntries[oldEntries.length] = relativeLibraryEntry;
    jProject.setRawClasspath(newEntries, null);
}

Обратите внимание, что, как упоминал Эндрю Айзенберг, вам нужно включить зависимость плагина org.eclipse.jdt.core в MANIFEST.MF вашего плагина.

Обратите внимание, что вам также может понадобиться программно обновить проект .

0 голосов
/ 25 августа 2014

Чтобы получить доступ к IJavaProject и т. Д., Перейдите в свой файл plugin.xml и добавьте org.eclipse.jdt.core в путь к классам. После этого вы можете импортировать эти пакеты в ваш проект.

...