Estructura de directorios
Estructura estándar (Maven/Gradle)
mi-proyecto/├── src/│ ├── main/│ │ ├── java/ # Código fuente│ │ │ └── com/empresa/proyecto/│ │ ├── resources/ # Recursos (configs, archivos estáticos)│ │ └── webapp/ # Archivos web (solo proyectos web)│ └── test/│ ├── java/ # Tests│ └── resources/ # Recursos para tests├── target/ # Compilados (Maven)├── build/ # Compilados (Gradle)├── pom.xml # Maven├── build.gradle # Gradle├── .gitignore└── README.mdsrc/main/java
Contiene todo el código fuente de producción.
src/main/java/└── com/empresa/proyecto/ ├── Main.java ├── config/ │ └── AppConfig.java ├── modelo/ │ ├── Usuario.java │ └── Pedido.java ├── servicio/ │ ├── UsuarioServicio.java │ └── PedidoServicio.java ├── repositorio/ │ └── UsuarioRepositorio.java └── util/ └── StringUtil.javasrc/main/resources
Archivos de configuración y recursos no compilables.
src/main/resources/├── application.properties # Configuración principal├── application-dev.properties # Configuración para desarrollo├── application-prod.properties # Configuración para producción├── logback.xml # Configuración de logging├── db/│ ├── migration/ # Scripts de migración (Flyway)│ │ ├── V1__crear_tablas.sql│ │ └── V2__agregar_indices.sql│ └── seed/ # Datos iniciales│ └── usuarios.sql├── templates/ # Plantillas (Thymeleaf, FreeMarker)│ └── email.html└── static/ # Archivos estáticos (web) ├── css/ ├── js/ └── images/src/test/java
Tests unitarios y de integración.
src/test/java/└── com/empresa/proyecto/ ├── servicio/ │ ├── UsuarioServicioTest.java │ └── PedidoServicioTest.java ├── repositorio/ │ └── UsuarioRepositorioTest.java └── integracion/ └── ApiIntegrationTest.javaConvención: misma estructura de packages que main/java, con sufijo Test.
src/test/resources
Recursos para tests.
src/test/resources/├── application-test.properties├── test-data.sql└── mocks/ └── usuario-mock.jsontarget/ o build/
Directorios generados automáticamente. No subir a Git.
Maven (target/)
target/├── classes/ # .class compilados├── test-classes/ # Tests compilados├── mi-proyecto-1.0.jar # JAR generado└── surefire-reports/ # Reportes de testsGradle (build/)
build/├── classes/├── libs/│ └── mi-proyecto-1.0.jar└── reports/ └── tests/Archivos de configuración
pom.xml (Maven)
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.empresa</groupId> <artifactId>mi-proyecto</artifactId> <version>1.0.0</version> <packaging>jar</packaging>
<properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> </properties>
<dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.10.0</version> <scope>test</scope> </dependency> </dependencies></project>build.gradle (Gradle)
plugins { id 'java'}
group = 'com.empresa'version = '1.0.0'
java { sourceCompatibility = '21' targetCompatibility = '21'}
repositories { mavenCentral()}
dependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'}
test { useJUnitPlatform()}.gitignore
# Compiladostarget/build/*.class*.jar*.war
# IDEs.idea/.vscode/*.iml*.ipr*.iws
# Sistema operativo.DS_StoreThumbs.db
# Logslogs/*.log
# Configuración localapplication-local.propertiesREADME.md
# Mi Proyecto
Descripción breve del proyecto.
## Requisitos
- Java 21- Maven 3.9+
## Compilar
```bashmvn clean installEjecutar
java -jar target/mi-proyecto-1.0.jarTests
mvn test---
## Proyecto web (Spring Boot)mi-web-app/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/empresa/webapp/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ ├── controlador/ │ │ │ ├── servicio/ │ │ │ ├── repositorio/ │ │ │ └── modelo/ │ │ └── resources/ │ │ ├── application.yml │ │ ├── static/ │ │ │ ├── css/ │ │ │ ├── js/ │ │ │ └── images/ │ │ └── templates/ │ │ └── index.html │ └── test/ ├── pom.xml └── README.md
---
## Proyecto multi-módulomi-aplicacion/ ├── core/ # Módulo de lógica de negocio │ ├── src/ │ └── pom.xml ├── api/ # Módulo de API REST │ ├── src/ │ └── pom.xml ├── web/ # Módulo web │ ├── src/ │ └── pom.xml ├── common/ # Utilidades compartidas │ ├── src/ │ └── pom.xml ├── pom.xml # POM padre └── README.md
`pom.xml` padre:
```xml<project> <groupId>com.empresa</groupId> <artifactId>mi-aplicacion</artifactId> <version>1.0.0</version> <packaging>pom</packaging>
<modules> <module>common</module> <module>core</module> <module>api</module> <module>web</module> </modules></project>Buenas prácticas
-
Sigue la estructura estándar: Facilita que otros entiendan tu proyecto.
-
No mezcles src y bin/target: Usa las carpetas de compilados generadas.
-
Separa tests de producción:
src/mainvssrc/test. -
Configura .gitignore: No subas
target/,build/, o archivos del IDE. -
README claro: Instrucciones de compilación, ejecución y contribución.
Próximo paso
Entiende cómo funciona la JVM: ¿Qué es la JVM? →