2011-11-03 12 views
5

Zajmuję się tworzeniem wtyczki m2e dla wtyczki maven, która faktycznie generuje pewne źródła. Potrzebuję dodać wygenerowane źródła (folder) do obszaru roboczego jako folder źródłowy.Programowo dodaj folder źródłowy z wtyczki Eclipse

użyłem JavaCore dla pliku edit .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); 

ale ten kod nie działa ona mówi: Ścieżka dla IClasspathEntry musi być absolutna

Gdybym próbował użyć absolutna ścieżka, została napisana do .classpath, ale w Eclipse nie była wyświetlana jako folder źródłowy.

Czy ktoś ma jakieś sugestie? To powinno być łatwe zadanie, ale nie wiem, jak go rozwiązać.

Odpowiedz

5

Problem rozwiązany ... to było łatwiejsze niż się spodziewałem ...

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); 

I to będzie dodać wpis źródłowego .classpath plik:

+0

Dziękuję mister! Chociaż nie mogę tego teraz wypróbować, mam nadzieję, że będę mógł wykorzystać te informacje jutro. Mogłeś zaoszczędzić mi ogromnej ilości bólu głowy, biorąc pod uwagę słabą dokumentację dotyczącą problemu. – Vectovox

0

Wypróbuj jedną z metod JavaCore.newSourceEntry(...) zamiast JavaCore.newProjectEntry(...).

+0

mój błąd ... Napisałem źle kod. Próbowałem JavaCore.newProjectEntry (...) i był wyjątek: Ścieżka dla IClasspathEntry musi być absolutna –