Change:
<ins> { jdk , version , src , lib , stdenv , gradle , rsync , runCommand , testers }: # Each Corretto version is based on a corresponding OpenJDK version. So # building Corretto is more or less the same as building OpenJDK. Hence, the # Corretto derivation overrides the corresponding OpenJDK derivation in order # to have access to all the version-specific fixes for the various OpenJDK # builds. However, Corretto uses `gradle` as build tool (which in turn will # invoke `make`). The configure/build phases are adapted as needed. let pname = "corretto"; # The version scheme is different between OpenJDK & Corretto. # See https://github.com/corretto/corretto-17/blob/release-17.0.8.8.1/build.gradle#L40 # "major.minor.security.build.revision" in jdk.overrideAttrs (finalAttrs: oldAttrs: { inherit pname version src; name = "${pname}-${version}"; nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ jdk gradle rsync ]; dontConfigure = true; postPatch = '' # The rpm/deb task definitions require a Gradle plugin which we don't # have and so the build fails. We'll simply remove them here because # they are not needed anyways. rm -rf installers/linux/universal/{rpm,deb} # `/usr/bin/rsync` is invoked to copy the source tree. We don't have that. for file in $(find installers -name "build.gradle"); do substituteInPlace $file --replace "workingDir '/usr/bin'" "workingDir '.'" done ''; buildPhase = let # The Linux installer is placed at linux/universal/tar whereas the MacOS # one is at mac/tar. task = if stdenv.isDarwin then ":installers:mac:tar:packageBuildResults" else ":installers:linux:universal:tar:packageBuildResults"; in '' runHook preBuild # Corretto's actual built is triggered via `gradle`. gradle --console=plain --no-daemon ${task} # Prepare for the installPhase so that it looks like if a normal # OpenJDK had been built. dir=build/jdkImageName/images mkdir -p $dir file=$(find ./installers -name 'amazon-corretto-${version}*.tar.gz') tar -xzf $file -C $dir mv $dir/amazon-corretto-* $dir/jdk runHook postBuild ''; installPhase = oldAttrs.installPhase + '' # The installPhase will place everything in $out/lib/openjdk and # reference through symlinks. We don't rewrite the installPhase but at # least move the folder to convey that this is not OpenJDK anymore. mv $out/lib/openjdk $out/lib/corretto ln -s $out/lib/corretto $out/lib/openjdk ''; passthru = let pkg = finalAttrs.finalPackage; in oldAttrs.passthru // { tests = { version = testers.testVersion { package = pkg; }; vendor = runCommand "${pname}-vendor" { nativeBuildInputs = [ pkg ]; } '' output=$(${pkg.meta.mainProgram} -XshowSettings:properties -version 2>&1 | grep vendor) grep -Fq "java.vendor = Amazon.com Inc." - <<< "$output" && touch $out ''; compiler = runCommand "${pname}-compiler" { nativeBuildInputs = [ pkg ]; } '' cat << EOF  > Main.java class Main { public static void main(String[] args) { System.out.println("Hello, World!"); } } EOF ${pkg}/bin/javac Main.java ${pkg}/bin/java Main | grep -q "Hello, World!" && touch $out ''; }; }; meta = with lib; { homepage = "https://aws.amazon.com/corretto"; license = licenses.gpl2Only; description = "Amazon's distribution of OpenJDK"; platforms = jdk.meta.platforms; mainProgram = "java"; maintainers = with maintainers; [ rollf ]; }; }) </ins>

Discussion:
Project description <!-- Describe the project a little: --Amazon Coretto JDK Metadata homepage URL: source URL: license: GPL 2.0 platforms: linux (and all else if possible)