// Maven is a build automation tool for Java package maven import ( "strings" "alpha.dagger.io/dagger" "alpha.dagger.io/alpine" "alpha.dagger.io/os" ) // A Maven project #Project: { // Application source code source: dagger.#Artifact @dagger(input) // Extra alpine packages to install package: { [string]: true | false | string } @dagger(input) // Environment variables env: { [string]: string } @dagger(input) phases: [...string] | *["package"] @dagger(input) goals: [...string] | *[] @dagger(input) // Optional arguments for the script args: [...string] | *[] @dagger(input) // Build output directory build: os.#Dir & { from: ctr path: "/build" } @dagger(output) ctr: os.#Container & { image: alpine.#Image & { "package": package & { bash: "=~5.1" openjdk11: "=~11.0.9" maven: "=~3.6.3" } } shell: path: "/bin/bash" command: """ opts=( $(echo $MAVEN_ARGS) ) mvn $MAVEN_GOALS $MAVEN_PHASES ${opts[@]} result=$? modules=$(mvn -Dexec.executable='pwd' -Dexec.args='${project.artifactId}' exec:exec -q) for module in $modules;do source=$(echo "$module/target" | tr -s /) target=$(echo "/build/$module" | tr -s /) mkdir -p $target;cp -a $source $target 2>/dev/null || : done exit $result """ "env": env & { MAVEN_ARGS: strings.Join(args, "\n") MAVEN_PHASES: strings.Join(phases, "\n") MAVEN_GOALS: strings.Join(goals, "\n") } dir: "/" mount: "/": from: source } }