2010-08-18 11 views
9

Hola, he estado usando un IDE pero ahora necesito ejecutarlo y compilarlo desde la línea de comando.Compilación de varios paquetes usando la línea de comando en Java

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

Así que tienen

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

¿Conoce la forma de compilar todo con javac?

Respuesta

6

Esto debería hacer que (puede requerir elementos de rutas de clases adicionales mediante el modificador de línea de comandos): -cp

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

Pero si su proceso de construcción se vuelve más complejo (y lo hará!), usted debe mirar en el uso Apache Ant para la automatización de la construcción.

+2

+1 - Para un proyecto existente con un mínimo de externalidades dependies, Ant es más simple que (por ejemplo) Maven. Su IDE incluso puede generar un archivo inicial "build.xml". –

+0

Gracias, probé esto, compila todo, pero no genera la estructura de clases así que cuando trato de ejecutar mi main dice "" main "java.lang.NoClassDefFoundError: Wrapper/java" – Altober

+1

@Altober: la herramienta 'java' espera * nombres de clase *, no nombres de archivos, y especialmente no nombres de archivos fuente. Probablemente necesites hacer algo como 'java Wrapers.Wrapper', asumiendo que tienes una clase" Wrapper "dentro de un paquete" Wrapers " –

8

Debe utilizar herramientas de compilación como Maven o Ant para dichas tareas.

En las etapas iniciales, cuando el proyecto no es muy complejo puede utilizar la siguiente línea al compilar, sobre la ruta de clase apropiada en su lugar (según lo sugerido por @ Michael):

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

+0

Sí, el problema es que tengo que hacerlo en un servidor externo y no puedo instalar ningún accesorio adicional. – Altober

+0

Puede descomprimir ant/maven en el mismo sistema de archivos donde almacena el código, no necesita "instalarlos", por lo que esto no le impedirá usar –

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

gracias, lo intenté, pero recibo "nombres de variables ilegales" ¿sabe por qué? Gracias – Altober

+0

tal vez necesites '-sourcepath src' también. (o necesita especificar el directorio 'src' como parte del classpath) –

+0

He intentado su fragmento con mi proyecto de netbeans y funciona: – auraham

2

Si realmente necesita sólo tiene que utilizar javac y los comandos estándar de UNIX que pudo para esto:

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

En muchos casos Ant es una exageración. Simplemente use un archivo BAT si se encuentra en Windows o en un script de shell (archivo sh) si se encuentra en Linux. Puedes crear un archivo de texto que incluya todos tus comandos javac y simplemente ejecutar ese archivo cuando quieras construir.

Por ejemplo, yo uso el siguiente archivo del palo para construir 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 
+0

¿Qué pasa si refactoriza un paquete o agrega un nuevo paquete, debe tocar este archivo cada vez? Eche un vistazo a http://skillsmatter.com/podcast/java-jee/zen-and-the-art-of-build-script-maintenance si necesita convencer ... –

+2

No tengo idea de los demás. Pero en el transcurso de un proyecto, la cantidad de veces que necesito modificar dicho archivo por lotes es minúsculo, si es que lo hago. No hay dudas de que Maven and Ant está garantizado; pero no los he encontrado. A veces para matar a una mosca, no es necesario un shutgun (ni un nuke) – aepryus

0

La verdadera respuesta es -d javac (lugares donde las clases a ser fabricados y colocados) -sourcepath (fuente de la paquete en la raíz) -cp (vía de acceso de clases de las dependencias que también puede ser una carpeta de clases donde se compilan y conservan las clases) nombre completo calificado del archivo java.

Ex javac -d clases -sourcepath src clases -cp src \ com \ test \ FirstSample.java

El FirstSample.java contiene el método principal. La estructura de Pacjage se menciona a continuación.

Antes de compilar
HomeApp
--src
------ com \ test \ FirstSample.java (Primera muestra usando el FirstPojo.java)
------ com \ test \ FirstPojo.java
--classes

Después de compilar
HomeApp
--src
------ com \ test \ FirstSample.java (FirstSample.java usando FirstPojo.java)
------ com \ test \ FirstPojo.java
--classes
------ com \ test \ FirstSample.class (FirstSample.class utilizando el FirstPojo.class)
- ----- com \ test \ FirstPojo.class

Cuestiones relacionadas