Opción javac para compilar todos los archivos java en un directorio determinado de forma recursiva

Resuelto user496934 asked hace 13 años • 11 respuestas

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?

user496934 avatar Jul 08 '11 17:07 user496934
Aceptado

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 javacofrece: los nombres de clase a compilar se pueden especificar en un archivo. Simplemente debes pasar el nombre del archivo javaccon el @prefijo.

Si puedes crear una lista de todos los *.javaarchivos 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.txtarchivo 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.xmlarchivo 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:eclipsecomando). 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 :-)

rlegendi avatar Jan 07 '2012 12:01 rlegendi
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)

Matthieu Riegler avatar Nov 30 '2011 20:11 Matthieu Riegler

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

freaker avatar Jul 02 '2015 11:07 freaker