Opción javac para compilar todos los archivos java en un directorio determinado de forma recursiva
Estoy usando el compilador javac para compilar 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 tantas rutas, ¿cómo puedo pedirle al compilador que compile de forma recursiva todos los archivos java del directorio com principal?
También sugeriría usar algún tipo de herramienta de compilación ( Ant o Maven , Ant ya está sugerido y es más fácil para comenzar) o un IDE que maneje la compilación (Eclipse usa compilación incremental con estrategia de conciliación, y ni siquiera tienes que hacerlo). tenga cuidado de presionar cualquier botón "Compilar" ).
Usando Javac
Si necesita probar algo para un proyecto más grande y no tiene ninguna herramienta de compilación adecuada cerca, siempre puede usar un pequeño truco que javac
ofrece: los nombres de clase a compilar se pueden especificar en un archivo. Simplemente debes pasar el nombre del archivo javac
con el @
prefijo.
Si puedes crear una lista de todos los *.java
archivos de tu 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 sencilla.
- El inconveniente es que tiene que regenerar el
sources.txt
archivo cada vez que crea una nueva fuente o cambia el nombre de un archivo existente, lo cual es una tarea fácil de olvidar (y por lo tanto propensa a errores) y tediosa.
Usando una herramienta de construcción
A largo plazo, es mejor utilizar una herramienta diseñada para crear software.
Usando hormiga
Si crea un build.xml
archivo simple que describe cómo construir el software:
<project default="compile">
<target name="compile">
<mkdir dir="bin"/>
<javac srcdir="src" destdir="bin"/>
</target>
</project>
Puede compilar todo el software ejecutando el siguiente comando:
$ ant
- La ventaja es que está utilizando una herramienta de compilación estándar que es fácil de ampliar.
- El inconveniente es que tienes que descargar, configurar y aprender una herramienta adicional. Tenga en cuenta que la mayoría de los IDE (como NetBeans y Eclipse) ofrecen un gran soporte para escribir archivos de compilación, por lo que no tiene que descargar nada en este caso.
Usando Maven
Maven no es tan fácil de configurar y trabajar, pero aprenderlo vale la pena. Aquí tienes un excelente tutorial para iniciar un proyecto en 5 minutos .
- Su principal ventaja (para mí) es que también maneja dependencias, por lo que no necesitarás descargar más archivos Jar y administrarlos a mano y lo encontré más útil para construir, empaquetar y probar proyectos más grandes.
- El inconveniente es que tiene una curva de aprendizaje pronunciada, y si a los complementos de Maven les gusta suprimir errores :-) Otra cosa es que muchas herramientas también funcionan con repositorios de Maven (como Sbt para Scala, Ivy para Ant, Graddle para Groovy) .
Usando un IDE
Ahora bien, ¿qué podría aumentar su productividad de desarrollo? Existen algunas alternativas de código abierto (como Eclipse y NetBeans , prefiero la primera) e incluso alternativas comerciales (como IntelliJ ) que son bastante populares y poderosas.
Pueden gestionar la creación del proyecto en segundo plano para que usted no tenga que lidiar con todas las cosas de la línea de comandos. Sin embargo, siempre resulta útil saber qué sucede realmente en segundo plano para poder detectar errores ocasionales como un archivo ClassNotFoundException
.
Una nota adicional
Para proyectos más grandes, siempre se recomienda utilizar un IDE y una herramienta de compilación. El primero aumenta su productividad, mientras que el segundo hace posible utilizar diferentes IDE con el proyecto (por ejemplo, Maven puede generar descriptores de proyecto Eclipse con un simple mvn eclipse:eclipse
comando). Además, tener un proyecto que se puede probar/construir con un comando de una sola línea es fácil de presentar a nuevos colegas y, por ejemplo, a un servidor de integración continua. Pedazo de tarta :-)
find . -name "*.java" -print | xargs javac
Un poco brutal, pero funciona como el infierno. (Úselo solo en programas pequeños, no es en absoluto eficiente)
En el caso habitual en el que desea compilar todo el proyecto, simplemente puede proporcionar a javac su clase principal y dejar que compile todas las dependencias necesarias:
javac -sourcepath . path/to/Main.java