Create Java Project programmatically [message #1816348] |
Mon, 28 October 2019 08:57 |
Miriam H. Messages: 8 Registered: May 2018 |
Junior Member |
|
|
Hi,
I´am working on a wizard for creating a Java Project where also Xtext Nature and libraries (xtend and an own library as well) should be added.
Now my Problem: After creating a few projects and restarting the runtime, the project I created at last is closed and I have to open it (right click on project > Open Project). For example I create three projects p1, p2, p3 first, close the runtime then, after a restart p3 would be close.
Here is the program sequence (I summarized it a little for a better overview and removed try catch statements as well):
NullProgressMonitor monitor = new NullProgressMonitor();
project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
projectLocation = project.getFullPath().toString();
if (!project.exists())
{
project.create(monitor);
project.open(monitor);
}
// add project natures
int numberOfNewNatures = 2;
final String XTEXT_NATURE = "org.eclipse.xtext.ui.shared.xtextNature";
IProjectDescription desc = project.getDescription();
String[] prevNatures = desc.getNatureIds();
String[] newNatures = new String[prevNatures.length + numberOfNewNatures];
System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
newNatures[newNatures.length - 1] = XTEXT_NATURE;
newNatures[newNatures.length - numberOfNewNatures] = JavaCore.NATURE_ID;
desc.setNatureIds(newNatures);
project.setDescription(desc, new NullProgressMonitor());
//now create Java Project
javaProject = JavaCore.create(project);
//add bin folder (somehow somtimes it already exists and sometimes not...)
IFolder binFolder = javaProject.getProject().getFolder("bin");
if (!binFolder.exists())
{
binFolder.create(false, true, null);
}
javaProject.setOutputLocation(binFolder.getFullPath(), null);
// add JRE System Library to classpath
IClasspathEntry[] jcp = org.eclipse.jdt.ui.PreferenceConstants.getDefaultJRELibrary();
setClasspath(jcp);
//add Xtend Library to classpath
XtendLibClasspathAdder xLibAdder = new XtendLibClasspathAdder();
xLibAdder.addLibsToClasspath(javaProject, new NullProgressMonitor());
// add OWN Library
IClasspathEntry[] ownClasspathEntry = new IClasspathEntry[]{JavaCore.newContainerEntry(OWNClasspathContainerInitializer.OWN_LIBRARY_PATH)};
setClasspath(ownClasspathEntry);
//add src folder to class path (ugly workaround to prevent ArrayIndexOutOfBoundsException when src folder already exists)
IFolder sourceFolder = project.getFolder("src");
sourceFolder.create(false, true, null);
IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
IClasspathEntry[] newEntries = null;
IClasspathEntry[] oldEntryWithoutSrc = new IClasspathEntry[oldEntries.length-1];
boolean srcRemoved = false;
for (int i = 0; i < oldEntries.length; i++)
{
if (oldEntries[i].getPath().equals(javaProject.getPath()))
{
List <IClasspathEntry> entryList = new ArrayList <IClasspathEntry> (Arrays.asList(oldEntries));
entryList.remove(i);
entryList.toArray(oldEntryWithoutSrc);
newEntries = new IClasspathEntry[oldEntries.length];
System.arraycopy(oldEntryWithoutSrc, 0, newEntries, 0, oldEntryWithoutSrc.length);
newEntries[oldEntryWithoutSrc.length] = JavaCore.newSourceEntry(root.getPath());
srcRemoved = true;
break;
}
}
if (!srcRemoved)
{
newEntries = new IClasspathEntry[oldEntries.length + 1];
System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
newEntries[oldEntries.length + 1] = JavaCore.newSourceEntry(root.getPath());
}
javaProject.setRawClasspath(newEntries, null);
project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
Maybe somone can has a clue what I did wrong? Any help would be appreciated.
Thanks,
Miriam
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.02827 seconds