Opción javac para comstackr todos los archivos java bajo un directorio dado recursivamente

Estoy usando el comstackdor javac para comstackr archivos java en mi proyecto. Los archivos se distribuyen en varios paquetes como este: com.vistas.util , com.vistas.converter , com.vistas.LineHelper , com.current.mdcontect .

Cada uno de estos paquetes tiene varios archivos java. Estoy usando javac así:

 javac com/vistas/util/*.java com/vistas/converter/*.java com.vistas.LineHelper/*.java com/current/mdcontect/*.java 

(en una línea)

En lugar de dar tantos caminos, ¿cómo puedo pedirle al comstackdor que compile recursivamente todos los archivos java del directorio padre com?

También sugeriría usar algún tipo de herramienta de comstackción ( Ant o Maven , Ant ya está sugerido y es más fácil de empezar) o un IDE que maneja la comstackción (Eclipse usa la comstackción incremental con la estrategia de conciliación, y ni siquiera tiene que cuidado de presionar cualquier botón “Comstackr” ).

Usando Javac

Si necesita probar algo para un proyecto más grande y no tiene herramientas de construcción adecuadas cerca, siempre puede usar un pequeño truco que javac ofrece: los nombres de clases para comstackr se pueden especificar en un archivo. Simplemente debe pasar el nombre del archivo a javac con el prefijo @ .

Si puede crear una lista de todos los archivos *.java en su proyecto, es fácil:

 # Linux / MacOS $ find -name "*.java" > sources.txt $ javac @sources.txt :: Windows > dir /s /B *.java > sources.txt > javac @sources.txt 
  • La ventaja es que es una solución rápida y fácil.
  • El inconveniente es que debe regenerar el archivo sources.txt cada vez que crea una nueva fuente o renombra un archivo existente, que es fácil de olvidar (y por lo tanto propenso a errores) y tedioso.

Usando una herramienta de comstackción

A largo plazo, es mejor usar una herramienta que fue diseñada para crear software.

Usando ant

Si crea un archivo simple build.xml que describe cómo crear el software:

       

puede comstackr todo el software ejecutando el siguiente comando:

 $ ant 
  • La ventaja es que está utilizando una herramienta de comstackción estándar que es fácil de ampliar.
  • El inconveniente es que debe descargar, configurar y aprender una herramienta adicional. Tenga en cuenta que la mayoría de los IDE (como NetBeans y Eclipse) ofrecen una gran compatibilidad para escribir archivos de comstackción, por lo que no tiene que descargar nada en este caso.

Usando Maven

Maven no es tan trivial para establecer y trabajar, pero aprender vale la pena. Aquí hay un gran tutorial para comenzar un proyecto en 5 minutos .

  • Su principal ventaja (para mí) es que también maneja dependencias, por lo que no necesitará descargar más archivos Jar y administrarlos a mano, y me pareció más útil para crear, empaquetar y probar proyectos más grandes.
  • El inconveniente es que tiene una curva de aprendizaje abrupta, y si a los complementos de Maven les gusta suprimir errores 🙂 Otra cosa es que bastantes herramientas también operan con repositorys de Maven (como Sbt para Scala, Ivy para Ant, Graddle para Groovy) .

Usando un IDE

Ahora que lo que podría impulsar su productividad de desarrollo. Hay algunas alternativas de código abierto (como Eclipse y NetBeans , prefiero el primero) e incluso comerciales (como IntelliJ ) que son bastante populares y potentes.

Pueden administrar la construcción del proyecto en segundo plano para que no tenga que lidiar con todas las cosas de la línea de comando. Sin embargo, siempre es útil si sabes lo que sucede realmente en el fondo para poder buscar errores ocasionales como una ClassNotFoundException .

Una nota adicional

Para proyectos más grandes, siempre se recomienda usar un IDE y una herramienta de comstackción. El primero aumenta su productividad, mientras que el segundo hace posible usar diferentes IDE con el proyecto (p. Ej., Maven puede generar descriptores de proyecto Eclipse con un simple mvn eclipse:eclipse ). Además, tener un proyecto que pueda ser probado / construido con un único comando de línea es fácil de presentar a nuevos colegas y en un servidor de integración continua, por ejemplo. Pedazo de pastel 🙂

 find . -name "*.java" -print | xargs javac 

Un poco brutal, pero funciona como el infierno. (Usar solo en progtwigs pequeños, no es absolutamente eficiente)

Si tu caparazón lo admite, ¿funcionaría algo así?

 javac com/**/*.java 

Si su caparazón no es compatible con ** , entonces tal vez

 javac com/*/*/*.java 

funciona (para todos los paquetes con 3 componentes – adaptarse para más o menos).

En el caso habitual en que desee comstackr todo su proyecto, simplemente puede proporcionar javac a su clase principal y dejar que compile todas las dependencias requeridas:

javac -sourcepath . path/to/Main.java

Te aconsejaría que aprendieras a usar ant , que es muy adecuada para esta tarea y es muy fácil de entender y documentar.

Solo tendría que definir un objective como este en el archivo build.xml:

    

Solo estoy usando make con un simple archivo MAKE que se ve así:

 JAVAC = javac -Xlint:unchecked sources = $(shell find . -type f -name '*.java') classes = $(sources:.java=.class) all : $(classes) clean : rm -f $(classes) %.class : %.java $(JAVAC) $<  

Comstack las fonts de a una por vez y solo recomstack si es necesario.

El comando javac no sigue un proceso de comstackción recursivo, por lo que debe especificar cada directorio al ejecutar el comando o proporcionar un archivo de texto con los directorios que desea incluir:

 javac -classpath "${CLASSPATH}" @java_sources.txt 

He estado usando esto en un proyecto Xcode JNI para construir recursivamente mis clases de prueba:

 find ${PROJECT_DIR} -name "*.java" -print | xargs javac -g -classpath ${BUILT_PRODUCTS_DIR} -d ${BUILT_PRODUCTS_DIR}