skills/java-deploy/SKILL.md
Build and deploy Java applications — Maven, Gradle, Spring Boot, version detection, and Dockerfile patterns. Use when deploying a Java project, or when pom.xml or build.gradle is detected.
npx skillsauth add nixopus/agent java-deployInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Project is Java if:
pom.xml exists at the rootgradlew or build.gradle / build.gradle.kts exists at the rootpom.xml → maven.compiler.source or maven.compiler.targetbuild.gradle → sourceCompatibility or JavaLanguageVersion.sdkmanrc or .java-version fileRead from gradle/wrapper/gradle-wrapper.properties → distributionUrl.
mvn -B package -DskipTeststarget/<artifact-id>-<version>.jartarget/*.jar (fat JAR)mvn -B dependency:go-offline for layer caching./gradlew build -x test (prefer wrapper when gradlew exists)--no-daemon in Dockerbuild/libs/<name>-<version>.jarbuild/libs/*.jar (fat JAR)./gradlew dependencies --no-daemon for layer cachingjava -jar <jar-file>java -jar app.jarserver.port in application.properties or application.ymlPORT or SERVER_PORT environment| Dependency / config | Framework |
|---|---|
| spring-boot-starter-web | Spring Boot |
| spring-boot-starter-webflux | Spring Boot (reactive) |
| quarkus | Quarkus |
| micronaut | Micronaut |
| jakarta.servlet | Jakarta EE / Servlet |
application.properties, application.yml, application-*.ymlpom.xml, pom.xml children (multi-module)build.gradle, build.gradle.kts, settings.gradle, gradlew, gradle/wrapper/*src/Use BuildKit cache mounts:
Gradle:
RUN --mount=type=cache,target=/root/.gradle \
./gradlew build -x test --no-daemon
Maven:
RUN --mount=type=cache,target=/root/.m2/repository \
mvn -B package -DskipTests
| Stage | Image |
|---|---|
| Build (Maven) | eclipse-temurin:21-jdk-alpine or maven:3-eclipse-temurin-21 |
| Build (Gradle) | eclipse-temurin:21-jdk-alpine |
| Runtime | eclipse-temurin:21-jre-alpine or amazoncorretto:21-alpine |
Use JRE (not JDK) for runtime.
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY pom.xml ./
RUN mvn -B dependency:go-offline
COPY src ./src
RUN mvn -B package -DskipTests
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY gradlew ./
COPY gradle gradle
COPY build.gradle settings.gradle ./
RUN ./gradlew dependencies --no-daemon
COPY src ./src
RUN ./gradlew build -x test --no-daemon
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY pom.xml ./
RUN mvn -B dependency:go-offline
COPY src ./src
RUN mvn -B package -DskipTests
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
gradlew must have execute permission — add RUN chmod +x gradlew in the Dockerfile if builds fail with permission denied--no-daemon is essential for Gradle in Docker — the daemon persists between builds, wastes memory, and can hangtarget/*.jar may match multiple JARs (sources, javadoc) — use maven-jar-plugin with a fixed finalName or be specific with the pathJAVA_TOOL_OPTIONS affects all stages including runtime — unset it after the build stage if used for build-only JVM flagstools
Compressed catalog of all Nixopus API operations for the nixopus_api() tool
development
Deploy static file sites — Caddy/nginx serving, Staticfile config, and Dockerfile patterns. Use when deploying a static HTML site with no server-side runtime, or when index.html or a Staticfile is detected at the project root.
devops
Deploy shell script applications — interpreter detection, setup scripts, and Dockerfile patterns. Use when deploying a shell script project, or when start.sh is detected.
development
Self-healing loop for failed deployments — diagnose, fix, redeploy up to 3 attempts, then escalate or rollback. Load when a deployment fails or build errors occur.