1{ lib
2, stdenv
3, maven
4}:
5
6{ src
7, patches ? []
8, pname
9, version
10, mvnSha256 ? "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
11, mvnHash ? "sha256-${mvnSha256}"
12, mvnFetchExtraArgs ? {}
13, mvnParameters ? ""
14, ...
15} @args:
16
17# originally extracted from dbeaver
18# created to allow using maven packages in the same style as rust
19
20stdenv.mkDerivation (rec {
21 fetchedMavenDeps = stdenv.mkDerivation ({
22 name = "${pname}-${version}-maven-deps";
23 inherit src;
24
25 buildInputs = [
26 maven
27 ];
28
29 buildPhase = ''
30 mvn package -Dmaven.repo.local=$out/.m2 ${mvnParameters}
31 '';
32
33 # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
34 installPhase = ''
35 find $out -type f \
36 -name \*.lastUpdated -or \
37 -name resolver-status.properties -or \
38 -name _remote.repositories \
39 -delete
40 '';
41
42 # don't do any fixup
43 dontFixup = true;
44 outputHashMode = "recursive";
45 outputHash = mvnHash;
46 } // mvnFetchExtraArgs);
47
48 buildPhase = ''
49 runHook preBuild
50
51 mvnDeps=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)
52 mvn package --offline "-Dmaven.repo.local=$mvnDeps/.m2" ${mvnParameters}
53
54 runHook postBuild
55 '';
56} // builtins.removeAttrs args [ "mvnFetchExtraArgs" ])