UP | HOME

Java: construir proyectos

Table of Contents

Llegados a este punto ya sabes cómo compilar programas en Java compuestos por un único archivo fuente. En este apartado te vas a enfrentar a escenarios un poco más complicados, y realistas, donde tenemos programas escritos en Java organizados en proyectos compuestos por varios directorios y archivos fuentes.

Introducción y referencia

Antes de comenzar a desarrollar programas en Java recuerda que es fundamental instalar el JDK (Java Development Kit). Una vez hayas completado la instalación, tendrás acceso a un compilador llamado javac y a una máquina virtual que puedes ejecutar con el comando java. Además, dispondrás de otras herramientas útiles como un empaquetador jar o un generador de documentación como javadoc.

Puedes acceder a toda la documentación al respecto desde la web dev.java.

Compilar y ejecutar, todo en la misma carpeta

Imagina que tienes un programa que consta de tres fuentes en la raíz del proyecto:

  • Main.java que contiene la clase principal (entrada al programa)
  • Tarea.java
  • GestorTareas.java

Para compilar, desde la carpeta raíz del proyecto:

$ javac *.java

Y, para ejecutar, desde la raíz del proyecto:

$ java Main

Compilar y construir en otra carpeta

Ahora, veamos cómo reestructurar el proyecto organizándolo en una jerarquía como ves:

project/
|-- src/
|    |-- Tarea.java
|    |-- GestorTareas.java
|    |-- Main.java
|-- build/
|-- README.md

Compilamos/construímos desde la raíz del proyecto para dejar los resultados *.class en la carpeta build:

$ javac -d build src/*.java

Ahora podemos ejecutar el programa con la opción -cp (classpath):

$ java -cp build Main

Uso de paquetes

Cuando un programa crece en cantidad de fuentes y complejidad tenemos que organizar nuestro proyecto Java en paquetes. En clase, hemos visto qué son los paquetes en Java y qué problema resuelven.

Lo primero que tenemos que hacer es reestructurar la jerarquía de directorios para adaptarla a la jerarquía estándar cuando se usan paquetes.

Se sigue una convención de nomenclatura y una estructura de directorios que es estándar y ampliamente aceptada. Esta estructura ayuda a organizar el código de manera lógica y a evitar conflictos de nombres.

Detalles de la estructura:

  • Raíz de proyecto: src/main/java (esta es la estructura de Maven o Gradle, y la que vamos a usar nosotros)
  • Prefijo único de paquete: se usa un dominio al revés. Por ejemplo, si una empresa/organización tiene como dominio miorganizacion.com, el prefijo del paquete es com.miorganizacion
  • Paquetes: cada parte del nombre del paquete se convierte en subdirectorios y se pueden añadir, a partir del prefijo anterior, todos los subdirectorios que se necesiten y se consideren oportunos

Por ejemplo, si partimos de mi dominio proferoman.com, el proyecto anterior lo podríamos organizar así:

project/
├── build
├── README.md
└── src
    └── main
        └── java
            └── com
                └── proferoman
                    ├── hw1
                    │   └── HelloWorld.java
                    ├── hw2
                    │   └── HelloWorld.java
                    └── Main.java

Y, ahora, cada fichero tiene que empezar con la instruccion package seguida del nombre del paquete al que forma parte ese fichero. Al compilar veremos que hay un error porque, ahora, es necesario importar la clase que queremos usar.

Tras importar, entonces sí, ahora ya podemos compilar sin problema:

$ javac -d build src/main/java/com/proferoman/Main.java src/main/java/com/proferoman/hw1/HelloWorld.java src/main/java/com/proferoman/hw2/HelloWorld.java

Y vemos como, en build/, se mantiene la estructura de paquetes:

build/
└── com
    └── proferoman
        ├── hw1
        │   └── HelloWorld.class
        ├── hw2
        │   └── HelloWorld.class
        └── Main.class

Y, otro cambio más, a la hora de ejecutar tenemos que indicar la clase principal especificando su paquete completo:

$ java -cp build com.proferoman.Main

Author: Román Ginés Martínez Ferrández

Created: 2026-01-06 mar 18:17

Validate