Compilando múltiples paquetes usando la línea de comando en Java

4 minutos de lectura

avatar de usuario
Altober

Hola, he estado usando un IDE pero ahora necesito ejecutar y compilar desde la línea de comandos.

El problema es que tengo varios paquetes y he intentado encontrar la respuesta pero nada ha funcionado.

Así que tengo

src/
  Support/ (.java files)
  Me/ (.java files) 
  Wrapers/ (.java files)  

¿Sabes compilar todo con javac?

Esto debería hacerlo (puede requerir elementos de classpath adicionales a través del -cp interruptor de línea de comando):

javac Support/*.java Me/*.java Wrapers/*.java

Pero si su proceso de compilación se vuelve más complejo (¡y lo será!), debería considerar usar hormiga apache para la automatización de la construcción.

  • +1: para un proyecto existente con dependencias externas mínimas, Ant es más simple que (por ejemplo) Maven. Su IDE puede incluso generar un archivo “build.xml” inicial.

    – Esteban C.

    18 de agosto de 2010 a las 13:39

  • Gracias, probé esto, compila todo pero no genera la estructura de clase, así que cuando intento ejecutar mi principal dice “”main” java.lang.NoClassDefFoundError: Wrapper/java”

    – Altober

    18 de agosto de 2010 a las 13:46

  • @Altober: el java herramienta espera nombres de clases, no nombres de archivos, y especialmente no nombres de archivos fuente. Probablemente necesites hacer algo como java Wrapers.Wrappersuponiendo que tiene una clase “Envoltura” dentro de un paquete “Envolturas”

    –Michael Borgwardt

    18 de agosto de 2010 a las 13:50

  • ERES UN GENIO… FUNCIONÓ MUY BIEN. Gracias a todos ustedes.

    – Altober

    18 de agosto de 2010 a las 13:57


  • sí, el problema es que necesito hacerlo en un servidor externo y tampoco puedo instalar ningún otro.

    – Altober

    18 de agosto de 2010 a las 13:39

  • Puede descomprimir ant / maven en el mismo sistema de archivos en el que almacena su código, no necesita “instalarlos”, por lo que esto no le impedirá usar ninguno de los dos

    – Jon Freeman

    18 de agosto de 2010 a las 13:43

javac -d compiled $(find src -name *.java)

  • gracias, lo intenté pero recibo “nombres de variables ilegales”, ¿sabes por qué? Gracias

    – Altober

    18 de agosto de 2010 a las 13:43

  • tal vez necesites -sourcepath src así como. (o necesita especificar el src directorio como parte del classpath)

    –Ken Bloom

    18 de agosto de 2010 a las 16:22

  • Probé tu fragmento con mi proyecto netbeans y funciona:

    – auraham

    22 de septiembre de 2012 a las 17:41

avatar de usuario
Moritz

Si realmente necesita usar javac y los comandos UNIX estándar, puede hacer esto:

find src -name \*.java -print0 | xargs -0 javac -d classes

  • gracias, lo intenté pero recibo “nombres de variables ilegales”, ¿sabes por qué? Gracias

    – Altober

    18 de agosto de 2010 a las 13:43

  • tal vez necesites -sourcepath src así como. (o necesita especificar el src directorio como parte del classpath)

    –Ken Bloom

    18 de agosto de 2010 a las 16:22

  • Probé tu fragmento con mi proyecto netbeans y funciona:

    – auraham

    22 de septiembre de 2012 a las 17:41

avatar de usuario
aepryus

En muchos casos, Ant es exagerado. Simplemente use un archivo BAT si está en Windows o un script de shell (archivo sh) si está en Linux. Puede crear un archivo de texto que incluya todos sus comandos javac y simplemente ejecutar ese archivo cuando desee compilar.

Por ejemplo, uso el siguiente archivo bat para crear una de mis aplicaciones:

@echo off
echo Building Shazaam...

del classes\com\aepryus\shazaam\*.* /q
del classes\com\aepryus\shazaam\engine\*.* /q
del classes\com\aepryus\shazaam\domain\*.* /q
del classes\com\aepryus\shazaam\persist\*.* /q
del classes\com\aepryus\shazaam\view\*.* /q
del classes\com\aepryus\shazaam\task\*.* /q
del classes\com\aepryus\shazaam\action\*.* /q
del classes\com\aepryus\shazaam\controller\*.* /q

javac src\com\aepryus\shazaam\*.java        -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar; -d classes
javac src\com\aepryus\shazaam\engine\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\domain\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\persist\*.java    -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\view\*.java   -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\task\*.java   -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\action\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\controller\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepRPC.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes

cd classes
jar cf ..\war\WEB-INF\lib\Shazaam.jar .
cd..

echo Complete

  • ¿Qué pasa si refactoriza un paquete o agrega un paquete nuevo, tiene que tocar este archivo cada vez? Tener un reloj de skillsmatter.com/podcast/java-jee/… si necesitas convencer…

    – Jon Freeman

    18 de agosto de 2010 a las 13:56

  • Ni idea sobre los demás. Pero en el transcurso de un proyecto, la cantidad de veces que necesito modificar dicho archivo por lotes es minúscula, en todo caso. No hay situaciones de duda en las que Maven y Ant estén justificados; pero no los he encontrado. A veces, para matar una mosca, no es necesario un revólver (ni una bomba nuclear)

    – aepryus

    18 de agosto de 2010 a las 14:10

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad