Ciekawą ideą jest używanie kontenerów Dockera jako narzędzia. Załóżmy, że chcielibyśmy tylko „wypróbować” Mavena (nie instalując go lokalnie), możemy wykonać następującą komendę do wygenerowania szkieletu projektu:
docker run -it --rm -v ${pwd}:/usr/src/mymaven -w /usr/src/mymaven maven:latest mvn archetype:generate "-DgroupId=com.example" "-DartifactId=myproject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"
Podzielmy to na części:
docker run -it --rm -v ${pwd}:/usr/src/mymaven -w /usr/src/mymaven maven:latest
to jest składnia Dockera pozwalająca na uruchomienie obrazu maven, w trybie interaktywnym (-it), z automatycznym usunięciem kontenera po wyłączeniu (–rm), z użyciem bind mounts (-v w połączeniu z -w).
mvn archetype:generate "-DgroupId=com.example" "-DartifactId=myproject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"
a to jest składnia Mavena generująca szkielet projektu.
Możliwe uproszczenie przy użyciu Dockerfile i Docker Compose
Wydaje się to dosyć skomplikowane, ale można to trochę uprościć wykorzystując do tego Dockerfile:
FROM maven
WORKDIR /java-project
ENTRYPOINT [ "mvn" ]
oraz Docker Compose:
version: '3.8'
services:
mvn:
build: .\
volumes:
- ./:/java-project
stdin_open: true
tty: true
dzięki czemu możemy teraz korzystać z następującej komendy:
docker compose run mvn archetype:generate "-DgroupId=com.example" "-DartifactId=myproject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"