reconoce - ejecutar java desde cmd
cómo compilar múltiples archivos java cuando hay archivos java en otros paquetes (3)
Estoy compilando varios archivos en un directorio (javac * .java)
Mal ya Eso solo funcionará correctamente si las clases de Java no están en paquetes. La forma correcta de hacer esto es la siguiente, donde src
es el nombre del directorio en el que se encuentran todos los directorios de paquetes:
cd src
javac package1/package2/*.java
javac package3/package4/package5/*.java
etc para lo que sea su paquete / diseño de directorio es. Cada línea de comando javac
compilará todos los archivos en el directorio nombrado y todos los archivos .java en otros paquetes / directorios de los que depende que aún no estén compilados o que estén desactualizados.
Consulte la documentación de la herramienta para javac
.
Estoy compilando varios archivos en un directorio (javac * .java) pero tengo un problema cuando intento hacer esto:
Recibo errores de compilación que dicen que javac no puede encontrar un símbolo de un objeto.
Tengo varios paquetes que contienen archivos java que son necesarios para ejecutar el programa principal. Pero parece que tratar de compilarlos uno por uno no funcionará. Funciona bien en mi IDE, pero estoy interesado en saber cómo se hace a través del símbolo del sistema.
El programa principal está en la carpeta de controladores.
He intentado compilar los archivos en orden de dependencia pero eso no funcionó.
La documentation Javac proporciona toda la información necesaria. Sin embargo, podría ser útil usar Ant o Maven para compilaciones de línea de comandos.
This página proporciona un buen ejemplo de cómo usar primero javac y luego Ant para crear un proyecto simple.
Aquí hay un proyecto de ejemplo y cómo se puede compilar con javac.
La estructura de árbol del proyecto es esta:
.
├── build
└── src
├── attacks
├── drivers
│ └── Driver.java
└── exceptions
└── MyException.java
Hay dos directorios especiales: build
para contener clases compiladas y src
para contener archivos de origen (podrían estar en diferentes subdirectorios: paquetes).
El siguiente comando compila todo el proyecto y coloca el resultado en el directorio de build
.
javac -sourcepath src -d build src/**/*.java
El -sourcepath src
especifica el directorio src
como el lugar donde el compilador puede encontrar toda la fuente. Las opciones de -d build
le indican al compilador dónde colocar los archivos compilados.
La opción src/**/*.java
le dice al compilador qué archivos compilar realmente. En este caso específico, le dice a javac que mire dos niveles hacia abajo y seleccione todos los * .java en ese nivel.
Si hay archivos *.java
en niveles diferentes de los que se necesita especificar una lista de archivos. Para esto, uno podría crear dicha lista como un archivo externo y pasar estos archivos como en la opción de entrada para javac
.
Aquí es cómo se podría hacer esto bajo Linux / Unix:
find -name "*.java" > source.txt
El comando anterior crea el archivo source.txt que contiene rutas completas para los archivos * .java encontrados. Para este ejemplo contiene:
./src/drivers/Driver.java
./src/exceptions/MyException.java
Para compilar el proyecto con la lista de archivos de origen source.txt
en source.txt
, se puede usar el siguiente comando:
javac -d build @source.txt
Tenga en cuenta que @source.txt
especifica al final que le indica al compilador dónde buscar una lista de archivos de origen. Tenga en cuenta también que la opción -sourcepath
puede omitirse.
Aquí es cómo la estructura del directorio cambió después de ejecutar el comando anterior.
.
├── build
│ ├── drivers
│ │ └── Driver.class
│ └── exceptions
│ └── MyException.class
└── src
├── attacks
├── drivers
│ └── Driver.java
└── exceptions
└── MyException.java
Como se puede observar, el directorio de build
ahora contiene los archivos de clase compilados en los paquetes respectivos.
Y, si desea ejecutarlo, suponiendo, por ejemplo, que el Driver
tiene el método main
, el siguiente comando ejecuta el programa.
java -cp .:build:**/*.class drivers.Driver
Tenga en cuenta que el separador de archivos :
(dos puntos) se usa en Unix, para Windows cámbielo a ;
(punto y coma).
dos opciones:
1) Use la línea de comando para especificar todos los archivos para compilar
2) Cree un archivo con todos los nombres de archivo (salida de find, quizás) y ejecute javac @argfile