El caso de uso es simple. Obtuve los archivos de origen que se crearon con Eclipse. Por lo tanto, existe una estructura de directorio profunda, donde cualquier clase de Java podría referirse a otra clase de Java en la misma carpeta secundaria, hermana o padre.
¿Cómo compilo todo esto desde la terminal usando javac?
java
compilation
javac
directory-structure
euforia83
fuente
fuente
Respuestas:
Tienes que conocer todos los directorios o poder utilizar comodines.
javac dir1/*.java dir2/*.java dir3/dir4/*.java dir3/dir5/*.java dir6/*src/*.java
fuente
javac $(find . -name "*.java")
.Con Bash 4+, puede habilitar globstar
shopt -s globstar
y luego haz
fuente
Si todo lo que quiere hacer es ejecutar su clase principal (sin compilar los
.java
archivos de los que no depende la clase principal), puede hacer lo siguiente:cd <root-package-directory> javac <complete-path-to-main-class>
o
javac -cp <root-package-directory> <complete-path-to-main-class>
javac
resolvería automáticamente todas las dependencias y compilaría todas las dependencias también.fuente
-sourcepath .
opción y luego nombrar el archivo principal para obtener el mismo efectofind . -type f -name "*.java" | xargs javac
número 2, y este método solo si hay un único punto de entrada al método principal que abarca toda la aplicación.Tomaría la sugerencia de Jon y usaría Ant, ya que esta es una tarea bastante compleja.
Sin embargo, si está decidido a tenerlo todo en una línea en la Terminal, en Linux puede usar el comando de búsqueda . Pero no recomiendo esto en absoluto, ya que no hay garantía de que, digamos, Foo.java se compile después de Bar.java, aunque
Foo
useBar
. Un ejemplo sería:find . -type f -name "*.java" -exec javac {} \;
Si todas sus clases aún no se han compilado, si hay un arnés principal o clase de controlador (básicamente el que contiene su método principal), compilar esa clase principal individualmente debería compilar la mayor parte del proyecto, incluso si están en carpetas diferentes, ya que Javac hará todo lo posible para resolver los problemas de dependencia.
fuente
find_gnu . -type f -name "*.java" | xargs javac
una vez que la versión gnu de find.exe cambie de nombre a find_gnu.exe. Obtuve mi gnu find.exe de msysgit.for /f "usebackq" %f in (``dir /s /b *.java``) do javac %f
(use comillas inversas simplesdir /s /b
pero no puedo encontrar una manera de formatearlo correctamente).find
solución es problemática porque compila cada clase java por separado, lo que la hace muy lenta.El siguiente es el método que encontré:
1) Haga una lista de archivos con rutas relativas en un archivo (por ejemplo, FilesList.txt) de la siguiente manera (separados por espacios o líneas):
2) Utilice el comando:
javac @FilesList.txt -d classes
Esto compilará todos los archivos y colocará los archivos de clase dentro del directorio de clases.
Ahora, una forma fácil de crear FilesList.txt es esta: Vaya a su directorio raíz de origen.
Pero, esto poblará la ruta absoluta. Usando un editor de texto, "Reemplazar todo" la ruta hasta el directorio de origen (incluir \ al final) con "" (es decir, cadena vacía) y Guardar.
fuente
Las respuestas ya existentes parecen preocuparse solo por los archivos * .java en sí mismos y no por cómo hacerlo fácilmente con los archivos de biblioteca que podrían ser necesarios para la compilación.
Una buena situación de una línea que obtiene de forma recursiva todos los archivos * .java e incluye los archivos * .jar necesarios para la construcción es:
javac -cp ".:lib/*" -d bin $(find ./src/* | grep .java)
Aquí, el archivo bin es el destino de los archivos de clase, lib (y potencialmente el directorio de trabajo actual) contiene los archivos de la biblioteca y se compilan todos los archivos java en el directorio src y debajo.
fuente
Tendría que usar algo como Ant para hacer esto jerárquicamente:
http://ant.apache.org/manual/Tasks/javac.html
Deberá crear un script de compilación con un destino llamado compilación que contenga lo siguiente:
<javac sourcepath="" srcdir="${src}" destdir="${build}" > <include name="**/*.java"/> </javac>
Entonces podrá compilar todos los archivos ejecutando:
Alternativamente, importe su proyecto a Eclipse y automáticamente compilará todos los archivos fuente para ese proyecto.
fuente
Hay una forma de hacer esto sin usar un carácter de tubería, lo cual es conveniente si está bifurcando un proceso de otro lenguaje de programación para hacer esto:
find $JAVA_SRC_DIR -name '*.java' -exec javac -d $OUTPUT_DIR {} +
Aunque si está en Bash y / o no le importa usar una tubería, entonces puede hacer:
find $JAVA_SRC_DIR -name '*.java' | xargs javac -d $OUTPUT_DIR
fuente
Solución de Windows: asumiendo que todos los archivos contenidos en el subdirectorio 'src', y desea compilarlos en 'bin'.
for /r src %i in (*.java) do javac %i -sourcepath src -d bin
Si src contiene un archivo .java inmediatamente debajo de él, esto es más rápido
fuente