From 9a7693b7044146879c9cd7c9aab6154d73a8e73d Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Thu, 14 Sep 2023 13:22:59 +0200 Subject: [PATCH 1/5] buildMavenPackage: refactor to run test in drv only Uses the dependency:go-offline goal in the fixed output derivation to download all dependencies. As a result, the derivation can be built and tested offline in the main derivation. The advantage of this approach is that you don't need to redownload all dependencies if there are test failures. --- .../build-managers/apache-maven/build-package.nix | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/build-managers/apache-maven/build-package.nix b/pkgs/development/tools/build-managers/apache-maven/build-package.nix index 2026d6829371..45abbb5db1d9 100644 --- a/pkgs/development/tools/build-managers/apache-maven/build-package.nix +++ b/pkgs/development/tools/build-managers/apache-maven/build-package.nix @@ -10,6 +10,8 @@ , version , mvnHash ? "" , mvnFetchExtraArgs ? { } +, mvnDepsParameters ? "" +, manualMvnArtifactIds ? [ ] , mvnParameters ? "" , ... } @args: @@ -29,7 +31,13 @@ let buildPhase = '' runHook preBuild - mvn package -Dmaven.repo.local=$out/.m2 ${mvnParameters} + mvn dependency:go-offline -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} + + for artifactId in ${builtins.toString manualMvnArtifactIds} + do + echo "downloading manual $artifactId" + mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 + done runHook postBuild ''; @@ -65,7 +73,7 @@ stdenv.mkDerivation (builtins.removeAttrs args [ "mvnFetchExtraArgs" ] // { runHook preBuild mvnDeps=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd) - mvn package --offline "-Dmaven.repo.local=$mvnDeps/.m2" ${mvnParameters} + mvn package -o -nsu "-Dmaven.repo.local=$mvnDeps/.m2" ${mvnParameters} runHook postBuild ''; From 4ec7cd46465fca672759be818fdcf03323f250f4 Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Thu, 14 Sep 2023 18:27:39 +0200 Subject: [PATCH 2/5] buildMavenPackage: hide offline build behind feature flag The feature flags allows for packages to opt in and should not break current packages. --- .../apache-maven/build-package.nix | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/pkgs/development/tools/build-managers/apache-maven/build-package.nix b/pkgs/development/tools/build-managers/apache-maven/build-package.nix index 45abbb5db1d9..f083095a97bc 100644 --- a/pkgs/development/tools/build-managers/apache-maven/build-package.nix +++ b/pkgs/development/tools/build-managers/apache-maven/build-package.nix @@ -5,6 +5,7 @@ { src , sourceRoot ? null +, buildOffline ? false , patches ? [ ] , pname , version @@ -28,19 +29,28 @@ let maven ]; - buildPhase = '' - runHook preBuild + buildPhase = + if buildOffline + then '' + runHook preBuild - mvn dependency:go-offline -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} + mvn dependency:go-offline -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} - for artifactId in ${builtins.toString manualMvnArtifactIds} - do - echo "downloading manual $artifactId" - mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 - done + for artifactId in ${builtins.toString manualMvnArtifactIds} + do + echo "downloading manual $artifactId" + mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 + done - runHook postBuild - ''; + runHook postBuild + '' + else '' + runHook preBuild + + mvn package -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} + + runHook postBuild + ''; # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside installPhase = '' From 6e05e49f473d43f7db2a147517a90a6b3ff1e860 Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Fri, 15 Sep 2023 10:02:05 +0200 Subject: [PATCH 3/5] buildMavenPackage: rename manualMvnArtifactIds to manualMvnArtifacts --- .../tools/build-managers/apache-maven/build-package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/build-managers/apache-maven/build-package.nix b/pkgs/development/tools/build-managers/apache-maven/build-package.nix index f083095a97bc..6d990a699add 100644 --- a/pkgs/development/tools/build-managers/apache-maven/build-package.nix +++ b/pkgs/development/tools/build-managers/apache-maven/build-package.nix @@ -12,7 +12,7 @@ , mvnHash ? "" , mvnFetchExtraArgs ? { } , mvnDepsParameters ? "" -, manualMvnArtifactIds ? [ ] +, manualMvnArtifacts ? [ ] , mvnParameters ? "" , ... } @args: @@ -36,7 +36,7 @@ let mvn dependency:go-offline -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} - for artifactId in ${builtins.toString manualMvnArtifactIds} + for artifactId in ${builtins.toString manualMvnArtifacts} do echo "downloading manual $artifactId" mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 From d03e80e2537bfae06ce57b44448a2d29613e97d7 Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Mon, 18 Sep 2023 22:02:49 +0200 Subject: [PATCH 4/5] buildMavenPackage: refactor --- .../apache-maven/build-package.nix | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/pkgs/development/tools/build-managers/apache-maven/build-package.nix b/pkgs/development/tools/build-managers/apache-maven/build-package.nix index 6d990a699add..c9d0157d7b15 100644 --- a/pkgs/development/tools/build-managers/apache-maven/build-package.nix +++ b/pkgs/development/tools/build-managers/apache-maven/build-package.nix @@ -29,28 +29,21 @@ let maven ]; - buildPhase = - if buildOffline - then '' - runHook preBuild + buildPhase = '' + runHook preBuild + '' + lib.optionalString buildOffline '' + mvn dependency:go-offline -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} - mvn dependency:go-offline -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} - - for artifactId in ${builtins.toString manualMvnArtifacts} - do - echo "downloading manual $artifactId" - mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 - done - - runHook postBuild - '' - else '' - runHook preBuild - - mvn package -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} - - runHook postBuild - ''; + for artifactId in ${builtins.toString manualMvnArtifacts} + do + echo "downloading manual $artifactId" + mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 + done + '' + lib.optionalString (!buildOffline) '' + mvn package -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} + '' + '' + runHook postBuild + ''; # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside installPhase = '' From b2c5d08055f67825a296468f29b8ec85b712c77f Mon Sep 17 00:00:00 2001 From: Thibault Gagnaux Date: Tue, 19 Sep 2023 10:34:10 +0200 Subject: [PATCH 5/5] buildMavenPackage: use mvnParameters as before Otherwise it is not a feature flag and it may break current packages. --- .../tools/build-managers/apache-maven/build-package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/tools/build-managers/apache-maven/build-package.nix b/pkgs/development/tools/build-managers/apache-maven/build-package.nix index c9d0157d7b15..e069b5a4daaa 100644 --- a/pkgs/development/tools/build-managers/apache-maven/build-package.nix +++ b/pkgs/development/tools/build-managers/apache-maven/build-package.nix @@ -40,7 +40,7 @@ let mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2 done '' + lib.optionalString (!buildOffline) '' - mvn package -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters} + mvn package -Dmaven.repo.local=$out/.m2 ${mvnParameters} '' + '' runHook postBuild '';