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;
|
importar 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);
|
// crea un proyecto con el nombre «TESTJDT» IWorkspaceRoot root = ResourcesPlugin.getWorkspace (). getRoot (); Proyecto IProject = root.getProject («TESTJDT»); proyecto.create (nulo); proyecto.open (nulo); // establece la naturaleza de Java IProjectDescription description = project.getDescription (); description.setNatureIds (nueva cadena[] {JavaCore.NATURE_ID}); // crea el proyecto project.setDescription (description, null); IJavaProject javaProject = JavaCore.create (proyecto); // establece la ruta de construcción IClasspathEntry[] buildPath = {JavaCore.newSourceEntry (project.getFullPath (). append («src»)), JavaRuntime.getDefaultJREContainerEntry ()}; javaProject.setRawClasspath (buildPath, project.getFullPath (). append («bin»), nulo); // crea una carpeta usando el paquete de recursos IFolder folder = project.getFolder («src»); folder.create (verdadero, verdadero, nulo); // Agregar carpeta al elemento Java IPackageFragmentRoot srcFolder = javaProject .getPackageFragmentRoot (carpeta); // crea el fragmento de paquete IPackageFragment fragment = srcFolder.createPackageFragment («com.programcreek», true, null); // cadena de código de inicio y creación de unidad de compilación String str = «paquete com.programcreek;» + » n» + «prueba de clase pública {» + » n» + «nombre de cadena privada;» + » n» + «}»; ICompilationUnit cu = fragment.createCompilationUnit («Test.java», str, false, null); // crea un campo IType type = cu.getType («Test»); type.createField («edad de la cadena privada;», nulo, verdadero, nulo);
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());
}
}
|
public void run (acción IAction) {// Obtiene la raíz del espacio de trabajo IWorkspace workspace = ResourcesPlugin.getWorkspace (); IWorkspaceRoot root = workspace.getRoot (); // Obtener todos los proyectos en el espacio de trabajo IProject[] proyectos = root.getProjects (); // Recorre todos los proyectos para (IProject proyecto: proyectos) {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());
}
|
IWorkspaceRoot root = ResourcesPlugin.getWorkspace (). GetRoot (); espacio de trabajo final de IWorkspace = ResourcesPlugin.getWorkspace (); System.out.println («raíz» + root.getLocation (). ToOSString ()); Runnable runnable = new Runnable () {public void run () {try {IPath projectDotProjectFile = new Path («/ media / flashx / TestProjectImport» + «/.project»); IProjectDescription projectDescription = espacio de trabajo.loadProjectDescription (projectDotProjectFile); Proyecto de IProject = workspace.getRoot (). GetProject (projectDescription.getName ()); JavaCapabilityConfigurationPage.createProject (proyecto, projectDescription.getLocationURI (), nulo); //project.create(null); } captura (CoreException e) {e.printStackTrace (); }}}; // y ahora haz que el banco de trabajo haga el trabajo final IWorkbench workbench = PlatformUI.getWorkbench (); workbench.getDisplay (). syncExec (ejecutable); IProject[] proyectos = root.getProjects (); para (proyecto de IProject: proyectos) {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 org.eclipse.core.runtime mediante el Editor de menús de complementos. Simplemente agregar a la ruta de construcción no funcionará.
Si cree que este artículo es útil y desea leer más, puede ir a Eclipse JDT Tutorial Series que escribí.