A comprehensive Java development environment using layered Docker containers.
- OpenJDK 21 (LTS version)
- Maven - Dependency management and build tool
- Gradle 8.5 - Modern build automation
- Spring Boot CLI - Spring application scaffolding
- SDKMan - Java version management
- Git, Docker, and common development utilities (from base layer)
- VS Code Java extension pack support
- Maven and Gradle caching for faster builds
- Persistent M2 repository at
/workspace/m2repo
8080- Spring Boot default port8081- Alternative web application port5005- Java remote debugging port9090- Metrics/Actuator endpoints
./scripts/build-layer.shThis will:
- Check for
devbench-base:${USER}(build if needed) - Build the Java-specific layer (
java-bench:${USER})
./setup.shcode .Then select "Reopen in Container" from the command palette.
- Layer 1 (
devbench-base): Common development tools - Layer 2 (
java-bench): Java-specific packages and tools
Benefits:
- Faster rebuilds (only Layer 2 changes)
- Shared base across all benches
- Better Docker layer caching
# Create new Maven project
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app
# Build and package
mvn-package # alias for: mvn clean package
# Run tests
mvn-test# Create new Gradle project
gradle init
# Build project
gradle-build # alias for: gradle build
# Run tests
gradle-test# Create new Spring Boot project
spring init --dependencies=web,data-jpa my-spring-app
# Run Spring Boot application
spring-run # alias for: ./mvnw spring-boot:run# List available Java versions
sdk list java
# Install a specific Java version
sdk install java 17.0.9-tem
# Switch Java version
sdk use java 17.0.9-tem/workspace/
├── projects/ # Your Java projects
├── m2repo/ # Maven repository cache
└── .gradle/ # Gradle cache
Maven is configured to use /workspace/m2repo for the local repository, persisting dependencies across container restarts.
JAVA_HOME:/usr/lib/jvm/java-21-openjdk-amd64GRADLE_HOME:/opt/gradle/gradle-8.5MAVEN_OPTS:-Dmaven.repo.local=/workspace/m2repo
mvn-clean- Clean Maven projectmvn-package- Clean and packagemvn-install- Clean and installmvn-test- Run testsgradle-build- Build Gradle projectgradle-clean- Clean Gradle projectgradle-test- Run Gradle testsspring-run- Run Spring Boot app
# Check if image exists
docker images | grep java-bench
# Rebuild if needed
./scripts/build-layer.sh# Check Maven settings
cat ~/.m2/settings.xml
# Clear cache if needed
rm -rf /workspace/m2repo/*# Verify Java version
java -version
# Check JAVA_HOME
echo $JAVA_HOME- Container Version: 1.0.0
- Base Image: devbench-base
- JDK Version: OpenJDK 21
- Maven Version: (from apt)
- Gradle Version: 8.5
- Spring Boot CLI: 3.2.0