biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / tools / build-managers / apache-maven / build-package.nix
blob43fc8e123244413330c585f52befad6b846fb34e
1 { lib
2 , stdenv
3 , maven
4 }:
6 { src
7 , sourceRoot ? null
8 , buildOffline ? false
9 , patches ? [ ]
10 , pname
11 , version
12 , mvnHash ? ""
13 , mvnFetchExtraArgs ? { }
14 , mvnDepsParameters ? ""
15 , manualMvnArtifacts ? [ ]
16 , manualMvnSources ? [ ]
17 , mvnParameters ? ""
18 , ...
19 } @args:
21 # originally extracted from dbeaver
22 # created to allow using maven packages in the same style as rust
24 let
25   fetchedMavenDeps = stdenv.mkDerivation ({
26     name = "${pname}-${version}-maven-deps";
27     inherit src sourceRoot patches;
29     nativeBuildInputs = [
30       maven
31     ];
33     buildPhase = ''
34       runHook preBuild
35     '' + lib.optionalString buildOffline ''
36       mvn de.qaware.maven:go-offline-maven-plugin:1.2.8:resolve-dependencies -Dmaven.repo.local=$out/.m2 ${mvnDepsParameters}
38       for artifactId in ${builtins.toString manualMvnArtifacts}
39       do
40         echo "downloading manual $artifactId"
41         mvn dependency:get -Dartifact="$artifactId" -Dmaven.repo.local=$out/.m2
42       done
44       for artifactId in ${builtins.toString manualMvnSources}
45       do
46         group=$(echo $artifactId | cut -d':' -f1)
47         artifact=$(echo $artifactId | cut -d':' -f2)
48         echo "downloading manual sources $artifactId"
49         mvn dependency:sources -DincludeGroupIds="$group" -DincludeArtifactIds="$artifact" -Dmaven.repo.local=$out/.m2
50       done
51     '' + lib.optionalString (!buildOffline) ''
52       mvn package -Dmaven.repo.local=$out/.m2 ${mvnParameters}
53     '' + ''
54       runHook postBuild
55     '';
57     # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
58     installPhase = ''
59       runHook preInstall
61       find $out -type f \( \
62         -name \*.lastUpdated \
63         -o -name resolver-status.properties \
64         -o -name _remote.repositories \) \
65         -delete
67       runHook postInstall
68     '';
70     # don't do any fixup
71     dontFixup = true;
72     outputHashAlgo = if mvnHash != "" then null else "sha256";
73     outputHashMode = "recursive";
74     outputHash = mvnHash;
75   } // mvnFetchExtraArgs);
77 stdenv.mkDerivation (builtins.removeAttrs args [ "mvnFetchExtraArgs" ] // {
78   inherit fetchedMavenDeps;
80   nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [
81     maven
82   ];
84   buildPhase = ''
85     runHook preBuild
87     mvnDeps=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)
88     mvn package -o -nsu "-Dmaven.repo.local=$mvnDeps/.m2" ${mvnParameters}
90     runHook postBuild
91   '';
93   meta = args.meta or { } // {
94     platforms = args.meta.platforms or maven.meta.platforms;
95   };