En la publicación anterior, mostré cómo usar el modelo Java para crear un nuevo proyecto, acceder a un proyecto existente e importar / cargar dinámicamente un directorio de proyecto existente en el espacio de trabajo.
La verdadera pregunta es si queremos analizar una gran cantidad de proyectos (por ejemplo, 1000) y esos proyectos no tienen el archivo .project en su directorio. Entonces los proyectos de carga dinámica no funcionarían en absoluto.
En este artículo, mostraré cómo cargar dinámicamente una gran cantidad de proyectos en el espacio de trabajo. Cuando recorre el directorio que contiene una gran cantidad de proyectos de código abierto, para cada directorio haga lo siguiente:
1. Cree un código auxiliar del proyecto en el espacio de trabajo con el nombre del directorio.
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); m_project = root.getProject(projectName); try { // Create the project if (!m_project.exists()) { m_project.create(null); } m_project.open(null); javaProject = JavaCore.create(m_project); IProjectDescription description = m_project.getDescription(); description.setNatureIds(new String[] { JavaCore.NATURE_ID }); m_project.setDescription(description, null); // need to check to make sure this is right JRE IClasspathEntry[] buildPath = { JavaCore.newSourceEntry(m_project.getFullPath().append("src")), JavaRuntime.getDefaultJREContainerEntry() }; // set the classpath javaProject.setRawClasspath(buildPath, m_project.getFullPath() .append("bin"), null); // create the src folder IFolder folder = m_project.getFolder("src"); if (!folder.exists()) folder.create(true, true, null); srcFolder = javaProject.getPackageFragmentRoot(folder); Assert.isTrue(srcFolder.exists()); } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } |
2. Camine recursivamente por cada subdirectorio, para cada archivo .java haga lo siguiente:
1. lee el archivo fuente de Java en el directorio del proyecto
2. obtener la información del paquete a través de una expresión regular: Pattern.compile («^ paquete s + ([^;]+); «);
3. agregue cada archivo al modelo Java de acuerdo con los nombres de los paquetes
IPackageFragment fragment = srcFolder.createPackageFragment(pkg_name_from_java_file, true, null); fragment.createCompilationUnit(java_file_name, code_from_java_file, true, null); |
3. Utilice ASTParser para analizar cada proyecto y obtener la información deseada
Parece cargar / importar proyectos existentes al espacio de trabajo, pero en realidad está creando nuevos proyectos con código fuente existente.