En este artículo, usaremos Eclipse JDT para crear, acceder y cargar proyectos. Supongo que sabe cómo crear un proyecto de complemento de Eclipse simple que agrega un elemento de menú en el que puede hacer clic y activar algunas acciones. Si no lo sabe, puede consultar este artículo. La razón por la que necesitamos un proyecto de complemento es que el modelo Java solo funciona dentro de un complemento, una aplicación independiente no es compatible con el modelo Java.
Este artículo solo se centra en el modelo JDT Java. Se explorarán los siguientes tres temas:
- Crea proyectos en el espacio de trabajo
- Acceder a proyectos en el espacio de trabajo
- Importe dinámicamente proyectos existentes al espacio de trabajo
Esos son esencialmente importantes cuando desea procesar una gran cantidad de proyectos Java.
1. Crea proyectos
Podemos usar Java Model para crear un nuevo proyecto en el espacio de trabajo.
Lo siguiente aquí requiere las siguientes dependencias:
import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.launching.JavaRuntime; |
Agregue código para ejecutar el método. El código ignora las declaraciones try / catch, Eclipse le pedirá que agregue código de manejo de excepciones.
// create a project with name "TESTJDT" IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject project = root.getProject("TESTJDT"); project.create(null); project.open(null); //set the Java nature IProjectDescription description = project.getDescription(); description.setNatureIds(new String[] { JavaCore.NATURE_ID }); //create the project project.setDescription(description, null); IJavaProject javaProject = JavaCore.create(project); //set the build path IClasspathEntry[] buildPath = { JavaCore.newSourceEntry(project.getFullPath().append("src")), JavaRuntime.getDefaultJREContainerEntry() }; javaProject.setRawClasspath(buildPath, project.getFullPath().append( "bin"), null); //create folder by using resources package IFolder folder = project.getFolder("src"); folder.create(true, true, null); //Add folder to Java element IPackageFragmentRoot srcFolder = javaProject .getPackageFragmentRoot(folder); //create package fragment IPackageFragment fragment = srcFolder.createPackageFragment( "com.programcreek", true, null); //init code string and create compilation unit String str = "package com.programcreek;" + "n" + "public class Test {" + "n" + " private String name;" + "n" + "}"; ICompilationUnit cu = fragment.createCompilationUnit("Test.java", str, false, null); //create a field IType type = cu.getType("Test"); type.createField("private String age;", null, true, null); |
Cuando active la acción, se creará el siguiente proyecto.
2. Acceder a proyectos
Si ya hay proyectos en nuestro espacio de trabajo, podemos usar Java Model para recorrer cada uno de ellos.
public void run(IAction action) { // Get the root of the workspace IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); // Get all projects in the workspace IProject[] projects = root.getProjects(); // Loop over all projects for (IProject project : projects) { System.out.println(project.getName()); } } |
Si importamos algunos proyectos o creamos algunos, y hacemos clic en el elemento del menú que creamos, los nombres de los proyectos se mostrarán de la siguiente manera.
3. Cargar / importar dinámicamente proyectos existentes en el espacio de trabajo
En el paso anterior, necesitamos importar manualmente los proyectos existentes al espacio de trabajo. Si el número es mayor, esto no sería aplicable.
Eclipse JDT proporciona funciones para hacer esto de forma dinámica. Ahora veamos cómo importar una gran cantidad de proyectos existentes al espacio de trabajo. No copia archivos al directorio raíz del espacio de trabajo, solo apunta a los proyectos en el directorio externo. En el ejemplo, utilizo la unidad flash para guardar mis proyectos de código abierto. De esta manera, puede analizar miles de proyectos y obtener la información útil que necesita sin copiar nada.
IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); final IWorkspace workspace = ResourcesPlugin.getWorkspace(); System.out.println("root" + root.getLocation().toOSString()); Runnable runnable = new Runnable() { public void run() { try { IPath projectDotProjectFile = new Path("/media/flashx/TestProjectImport" + "/.project"); IProjectDescription projectDescription = workspace.loadProjectDescription(projectDotProjectFile); IProject project = workspace.getRoot().getProject(projectDescription.getName()); JavaCapabilityConfigurationPage.createProject(project, projectDescription.getLocationURI(), null); //project.create(null); } catch (CoreException e) { e.printStackTrace(); } } }; // and now get the workbench to do the work final IWorkbench workbench = PlatformUI.getWorkbench(); workbench.getDisplay().syncExec(runnable); IProject[] projects = root.getProjects(); for(IProject project: projects){ System.out.println(project.getName()); } |
¿Qué pasa si el proyecto que queremos cargar no contiene un archivo .project? Este es el caso complicado, necesitamos crear dinámicamente todos esos proyectos usando su código fuente.
Notas
Cuando practique los ejemplos anteriores, es posible que obtenga un mensaje de error como «El tipo org.eclipse.core.runtime.IAdaptable no se puede resolver. Se hace referencia indirectamente a partir de archivos .class obligatorios». La solución es agregar
Si cree que este artículo es útil y desea leer más, puede ir a Eclipse JDT Tutorial Series que escribí.