Программно добавить исходную папку из плагина Eclipse

#eclipse #classpath #eclipse-jdt

#eclipse #classpath #eclipse-jdt

Вопрос:

Я разрабатываю соединитель m2e для плагина out maven, который фактически генерирует некоторые исходники. Мне нужно добавить сгенерированные источники (папку) в рабочую область в качестве исходной папки.

Я использовал JavaCore для редактирования файла .classpath:

     IJavaProject javaProject = JavaCore.create(proj);
    IClasspathEntry[] entries = javaProject.getRawClasspath();

    IClasspathEntry[] newEntries = new IClasspathEntry[entries.length   1];
    System.arraycopy(entries, 0, newEntries, 0, entries.length);

    Path myPath = new Path("target/generated-sources");
    IClasspathEntry myEntry = JavaCore.newSourceEntry(myPath);

    newEntries[entries.length] = JavaCore.newSourceEntry(myEntry.getPath());
    javaProject.setRawClasspath(newEntries, null);
  

Но этот код не работает, он говорит:
Путь для IClasspathEntry должен быть абсолютным

Если бы я попытался использовать абсолютный путь, он был записан в .classpath, но в eclipse он не отображался как исходная папка.

У кого-нибудь есть какие-либо предложения? Это должна быть простая задача, но я не могу понять, как ее решить.

Ответ №1:

Проблема solved…it все оказалось проще, чем я ожидал…

 IJavaProject javaProject = JavaCore.create(proj);
IClasspathEntry[] entries = javaProject.getRawClasspath();

IClasspathEntry[] newEntries = new IClasspathEntry[entries.length   1];
System.arraycopy(entries, 0, newEntries, 0, entries.length);

IPath srcPath= javaProject.getPath().append("target/generated-sources");
IClasspathEntry srcEntry= JavaCore.newSourceEntry(srcPath, null);

newEntries[entries.length] = JavaCore.newSourceEntry(srcEntry.getPath());
javaProject.setRawClasspath(newEntries, null);
  

И это добавит исходную запись в файл .classpath:

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

1. Спасибо, мистер! Хотя я не могу попробовать это в данный момент, я надеюсь, что смогу использовать эту информацию завтра. Возможно, вы избавили меня от большой головной боли, учитывая плохую документацию по этой проблеме.

Ответ №2:

Попробуйте один из JavaCore.newSourceEntry(...) методов вместо JavaCore.newProjectEntry(...) .

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

1. моя ошибка… Я написал плохой код. Я попробовал JavaCore.newProjectEntry(…) и было исключение: путь для IClasspathEntry должен быть абсолютным