summary refs log tree commit diff
path: root/pkgs/development/java-modules/build-maven-package.nix
blob: 432f972b0ff646a4465f1d656d38a0587c83967c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{ lib, stdenv, maven, pkgs }:
{ mavenDeps, src, name, meta, m2Path, skipTests ? true, quiet ? true, ... }:

with builtins;
with lib;

let
  mavenMinimal = import ./maven-minimal.nix { inherit lib pkgs ; };
in stdenv.mkDerivation rec {
  inherit mavenDeps src name meta m2Path;

  flatDeps = unique (flatten (mavenDeps ++ mavenMinimal.mavenMinimal));

  propagatedBuildInput = [ maven ] ++ flatDeps;

  find = ''find ${concatStringsSep " " (map (x: x + "/m2") flatDeps)} -type d -printf '%P\n' | xargs -I {} mkdir -p $out/m2/{}'';
  copy = ''cp -rsfu ${concatStringsSep " " (map (x: x + "/m2/*") flatDeps)} $out/m2'';

  phases = [ "unpackPhase" "buildPhase" ];

  buildPhase = ''
    mkdir -p $out/target
    mkdir -p $out/m2/${m2Path}
    ${optionalString (length flatDeps > 0) find}
    ${optionalString (length flatDeps > 0) copy}
    if [ -f $out/m2/settings.xml ]; then rm $out/m2/settings.xml; fi
    echo "<settings><mirrors>\
      <mirror><id>tmpm2</id><url>file://$out/m2</url><mirrorOf>*</mirrorOf></mirror></mirrors>\
      <localRepository>$out/m2/</localRepository></settings>" >> $out/m2/settings.xml
    ${maven}/bin/mvn ${optionalString (quiet) "-q"} clean package -Dmaven.test.skip=${boolToString skipTests} -Danimal.sniffer.skip=true -gs $out/m2/settings.xml
    cp ./target/*.jar $out/m2/${m2Path}
    cp -v ./target/*.jar $out/target/
  '';
}