eclipse - simple - software processing 3
Importar archivos.java en el paquete correcto (6)
Bueno, aquí somos programadores, ¿verdad? por lo tanto, en lo que respecta a la investigación, es difícil encontrar este tipo de característica en cualquier IDE, ya que se debe advertir a un programador que coloque un archivo java en un paquete incorrecto y no debe organizarlo automáticamente para el programador.
Bueno, te sugiero que crees un sencillo programa de consola java que pueda hacer la manipulación del archivo por ti y sé que sería fácil para ti. Este será el posible algoritmo del programa.
- Leer un archivo .java
- Compruebe la línea de
package
hasta el terminador;
en ese archivo .java - reubique ese archivo de acuerdo con el nombre del paquete, bien reemplazando
.
Con los separadores de directorios se puede utilizar como dirección donde se reubicará el archivo. - Cree la carpeta si la carpeta de reubicación del archivo no existe
- Haga esto repetidamente hasta que todos los archivos sean reubicados.
Bueno, yo también quiero este tipo de función, no solo en eclipse, sino también en otros IDE que estén bien. Estaré esperando más respuestas en esta pregunta.
Tengo un montón de archivos de origen *.java
que contienen clases en varios paquetes. Estoy intentando importar todos estos archivos en proyectos de Eclipse, pero Eclipse siempre los coloca en el paquete predeterminado.
¿Cómo puedo decirle a Eclipse que coloque cada uno de los archivos en el subdirectorio del paquete apropiado, para que no tenga que crear todos los paquetes manualmente?
He intentado importar desde la función del sistema de archivos, así como copiar los archivos en el proyecto, todo lo cual colocaría los archivos en el paquete default
lugar de los indicados de manera explícita en la declaración del package
sobre cada archivo.
Las preguntas de SO relacionadas solo tratan con paquetes de referencia fuera de la jerarquía del directorio src
del proyecto , la creación manual de archivos en el directorio de paquetes adecuado , las declaraciones de import
faltantes o los paquetes de cambio de nombre masivo , pero no parece que este problema ya haya sido discutido.
Actualización: Tal como se solicita en los comentarios, aquí hay algunos archivos de ejemplo:
Prueba1.java
package some.random.pkg;
public class Test1 {
}
Prueba2.java
package some.other.pkg;
public class Test2 {
}
Prueba3.java
package yet.another.pkg;
public class Test3 {
}
Coloque todos ellos en el mismo directorio, luego intente importarlos en un proyecto Java en Eclipse sin crear manualmente los directorios para los distintos paquetes.
Actualización 2: para aclarar la escala, suponga que en realidad hay aproximadamente 100 archivos como estos (por supuesto, con más contenidos ;-)) semanalmente, por lo que estoy buscando una solución automatizada.
Cuando un archivo está en el paquete incorrecto, Eclipse le ofrecerá corregir el error moviendo el archivo. Con la función "solución rápida" (seleccione en la vista Error, presione CTRL + 1), puede moverlos fácilmente. Intente seleccionarlos todos a la vez, tal vez su versión de Eclipse sea más nueva que la mía y pueda solucionarlos todos de una vez. Si no, sigue siendo más rápido que crear el paquete manualmente.
De acuerdo con este link , puede obtener lo que realmente quiere hacer.
Archivo -> Nuevo Proyecto / Proyecto Web Dinámico
entonces
Archivo -> Nueva carpeta, haga clic en "Avanzado" y seleccione "Vincular a carpeta en el sistema de archivos".
Después de eso, haga clic derecho en la carpeta y seleccione BuildPath -> Usar como carpeta de origen. Eso es todo.
O
puede crear una nueva carpeta, copiar la carpeta de la parte superior que contiene los archivos * .java y pegarla. Luego haga clic derecho en él, seleccione BuildPath -> Usar como carpeta de origen ...
Espero que te funcione!
Estaba algo aburrido, así que creé una aplicación Java para obtener todos los archivos .java de su carpeta de trabajo actual y los puse en las subcarpetas apropiadas.
Luego puede copiar / pegar las carpetas / archivos recién creados en Eclipse.
Código fuente y .jar ejecutable: https://github.com/felipeweber/OrganizeJavaSources
Para ejecutarlo, copiará / pegará el archivo .jar ejecutable en la carpeta en la que tiene todos los archivos .java, y lo ejecutará con java -jar OrganizeJavaSources.jar desde una línea de comandos o comando. Debería funcionar tanto en Linux como en Windows (y probablemente también en MacOS).
En mis pruebas funcionó perfectamente con archivos sanos. Tenga en cuenta que no he realizado ningún tratamiento de error y, por lo tanto, cuarto, pero no dude en contribuir.
Buena suerte
Necesitas un hack. Espero que estés usando Linux, de lo contrario va a ser más difícil :)
1- Crea un pequeño programa java que lee y ejecuta un archivo .sh. Aquí hay un fragmento de código que muestra cómo puedes intentar leer desde un script.
ProcessBuilder pb = new ProcessBuilder("myshell.sh", "myArg1", "myArg2");
Process p = pb.start();
2- Crea el script .sh y asegúrate de que java lo está seleccionando correctamente (solo coloca un mensaje de eco en el script y asegúrate de que esté impreso)
3- El objetivo de este truco es tratar de usar un grep que lea todos los archivos con la extensión .java y canalizarlo al programa mv que los colocará en la carpeta correcta.
4- La forma en que descubrirá cómo colocar qué en qué carpeta (paquete) será posible porque puede leer cada uno de los archivos usando cat y de esta manera determinar dónde deben ir. El comando mkdir debería ayudarlo a crear las carpetas correctamente antes de mover los archivos.
5- Si no está seguro acerca de esta solución, permítame decirle que esta es una tarea muy compleja que requiere que examine bien y reconozca todos los patrones. Estoy seguro de que es posible y que puede hacerlo utilizando una lógica de canalización condicional y una música relajante y agradable para ayudarlo a concentrarse.
Aquí os dejo una guía de BASH para refrescar vuestra mente.
Buena suerte, y feliz nuevo 2013
Así que esto es lo que hice ...
Nuevo -> Proyecto Java (opciones: haga clic en "usar la carpeta del proyecto como raíz para las fuentes y los archivos de clase")
Siguiente
Seleccione "Vincular fuente adicional" (bajo Detalles)
Busque "Ubicación de la carpeta vinculada" y seleccione la carpeta superior (que contiene todos sus paquetes, etc.)
Terminar
Si ya tienes un proyecto creado entonces ...
Haga clic derecho en el proyecto en el explorador de paquetes y seleccione Propiedades
Seleccione "Java Build Path"
Seleccione "Link Source" (en la pestaña Source)
Busque "Ubicación de la carpeta vinculada" y seleccione la carpeta superior (que contiene todos sus paquetes, etc.)
Terminar
Si sus archivos no están en los directorios correspondientes a los paquetes definidos dentro de ellos, TOME UNA COPIA DE SEGURIDAD DE SUS ARCHIVOS (es decir, cópielos a otro directorio) e intente esto:
Compile el siguiente programa con javac MakePackDirs.java y ejecútelo utilizando java MakePackDirs , y las estructuras de directorios y archivos se crearán de acuerdo con las declaraciones de los paquetes y luego se utilizará el procedimiento descrito anteriormente.
import java.util.regex.*;
import java.util.*;
import java.io.*;
public class MakePackDirs {
public static void main(String[] args) throws Exception {
String pkg;
for (File f : new File(".").listFiles(
new FilenameFilter () {
public boolean accept (File dir, String name) {
return name.endsWith(".java");
} })) {
if (f.isDirectory()) continue;
System.out.println("Processing " + f.getName());
Scanner s = new Scanner(f);
try {
Pattern p = Pattern.compile("^[ ]*package +[^;]*",
Pattern.MULTILINE);
if ((pkg = s.findWithinHorizon(p,0))==null) continue;
}
finally {
s.close();
}
System.out.println("Found " + pkg);
pkg = pkg.split(" ")[1];
pkg = pkg.replaceAll("//.","/").trim();
System.out.println("Creating " + pkg);
File dir = new File(pkg);
boolean created = dir.mkdirs();
if (!created && !dir.exists())
throw new Exception("Can''t create package directory");
// Moving file
File dest = new File(dir, f.getName());
boolean renamed = f.renameTo(dest);
if (!renamed)
throw new Exception("Can''t move file to " + dest.getPath());
System.out.println(f.getName() + " moved to " + dir.getPath());
}
}
}