Compile Project With External Jars
Compile project with external jars
Dada esta estructura del proyecto, se va a compilar el proyecto usando los jars
/App/com/cristianpeter
├── lib/
com/companyA/Utils.java
com/companyB/Helper.java
├── src/
│ ├── Main.java
│ ├── ClaseA.java
│ └── paquete/
│ └── ClaseB.java
Compilar los .java
Vamos a compilar Utils.java y Extra.java para convertirlos en .class y después crear un jar para cada uno de ellos
/App/com/cristianpeter
├── lib/
com/companyA/Utils.java
com/companyA/Utils.class
com/companyB/Helper.java
com/companyB/Helper.class
├── src/
│ ├── Main.java
│ ├── ClaseA.java
│ └── paquete/
│ └── ClaseB.java
// Reached executing from file : com/cristianpeter/lib
// javac ./com/companyA/Utils.java
// javac ./com/companyB/Helper.java
Command
javac -d ./ Utils.java // compilar la clase
javac -d ./ Utils.java Extra.java // compilar varias clases
// -d = destiny
Los archivos .class como tienen package generarán esta estructura
-
Explicación
Cuando declaras esto en
Utils.java:package com.companyA;Le estás diciendo al compilador que la clase pertenece al paquete
com.companyA. Por convención y diseño, los.classdeben guardarse en una estructura de carpetas que refleje el paquete.
Creando los jars
Vamos a crear los jars de Utils.class y Extra.class dejando una estructura como la siguiente
/App/com/cristianpeter
├── lib/
com/companyA/Utils.java
com/CompanyA/Utils.class
com/CompanyA/Utils.jar
com/companyB/Helper.java
com/companyB/Helper.class
com/companyB/Helper.jar
├── src/
│ ├── Main.java
│ ├── ClaseA.java
│ └── paquete/
│ └── ClaseB.java
// Reached executing from file : com/cristianpeter/lib
// jar cfv ./com/companyA/Utils.jar ./com/companyA
// jar cfv ./com/companyB/Helper.jar ./com/companyB
// Error: jar cfv ./com/companyA/Utils.jar -C ./com/companyA ./
// -C ./com/companyA ./ -> Cambia de directorio a ./com/companyA y
// empaqueta todo lo que esté en ese directorio,
// preservando la estructura relativa desde ahí".
// por eso los jars no tienen el paquete com.companyB
jar cfv jar_name.jar location_file_jars/jars
jar cfv jar_name.jar file/jars -C out/lib ruta_relativa_file_jars(desde out/lib)
// c -> Create: indica que quieres crear un nuevo archivo .jar
// f -> File: indica que vas a especificar el nombre y ruta del archivo JAR
// v -> Verbose: Muestra detalles
// lib/Extra.jar El nombre y ruta del archivo JAR que estás creando
// -C out/lib Cambia temporalmente el directorio a out/lib (como cd out/lib)
// si se usa esta opción, toma esta ruta para encontrar los .class
// com/ejemplo/extra/ExtraHelper.class Ruta relativa dentro de out/lib de la clase que quieres agregar al jar
Comprobar el contenido de los Jars
jar tf lib/Utils.jar
Run Source Code With dependencies
Teniendo esta estructura, vamos a compilar el código fuente, indicando en el classpath la ubicación de los jars y vamos a ejecutar el programa
/App/com/cristianpeter
├── lib/
com/companyA/Utils.java
com/CompanyA/Utils.class
com/CompanyA/Utils.jar
com/companyB/Helper.java
com/companyB/Helper.class
com/companyB/Helper.jar
out/classes/com/cristianpeter/Main.class
├── src/
│ ├── Main.java
Main.class -> executed
│ ├── ClaseA.java
│ └── paquete/
│ └── ClaseB.java
// Reached executing from file : com/cristianpeter
// javac -cp "lib/com/companyA/Utils.jar:lib/com/companyB/Helper.jar" -d out/classes $(find src -name "*.java")
Ejecutar el programa manualmente
// Executed from file: com/cristianpeter
// java -cp "out/classes:lib/com/companyA/Utils.jar:lib/com/companyB/Helper.jar" com.cristianpeter.Main
// Está utilizando rutas relativas, como:
// out/classes → el directorio donde están tus .class compilados.
// lib/com/companyA/Utils.jar → tu JAR externo.
// lib/com/companyB/Helper.jar → tu otro JAR.
Configurar Intellij
- Configurar intellig
-
📂 Abrir el proyecto:
Abre
/App/com/cristianpetercomo raíz de proyecto en IntelliJ. -
🛠️ Estructura de proyecto:
- Ve a File > Project Structure (Ctrl+Alt+Shift+S).
- En Modules > Sources:
- Marca
src/comoSources. - Marca
out/classescomoClasses. - Marca
lib/comoLibrary files(o solo usa como ruta de librerías externas).
- Marca
-
➕ Agregar los
.jaral classpath:- Ve a File > Project Structure > Libraries.
- Haz click en
+→ Java → agrega:lib/com/companyA/Utils.jarlib/com/companyB/Helper.jar
- Aplica.
-
⚙️ Crear configuración de ejecución:
-
Ve a Run > Edit Configurations…
-
Click en
+→ Application- Name:
Run Main - Main class:
com.cristianpter.Main(o soloMainsi está en default)
(not needed when was done)
- Use classpath of module: selecciona tu módulo
- Classpath: asegúrate que incluya:
out/classes- los dos
.jardesdelib/
- Name:
-
-
✅ Ejecutar:
- Selecciona la configuración que creaste y dale a ▶️ Run.
-
Comando
javac -cp "lib/Utils.jar:lib/Extra.jar" -d out/classes $(find src -name "*.java")
java -cp "out/classes:lib/com/companyA/Utils.jar:lib/com/companyB/Helper.jar" com.cristianpeter.Main
// Está utilizando rutas relativas, como:
// out/classes → el directorio donde están tus .class compilados.
// lib/com/companyA/Utils.jar → tu JAR externo.
// lib/com/companyB/Helper.jar → tu otro JAR.
// -cp -> classpath -> donde estan las dependencias
// -d -> destiny -> carpeta de destino
$(find src -name "*.java") // busca todos los archivos .java dentro del directorio src y subdirectorios.