#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 должен быть абсолютным