Commit 2118d0b2 authored by Weijia Wang's avatar Weijia Wang
Browse files

exhibitor: convert to mavenfod

parent 50847470
Loading
Loading
Loading
Loading
+19 −32
Original line number Diff line number Diff line
{ fetchFromGitHub, maven, jdk, makeWrapper, lib, stdenv, ... }:
stdenv.mkDerivation rec {
{ lib, javaPackages, fetchFromGitHub, maven, makeWrapper, jdk }:

javaPackages.mavenfod rec {
  pname = "exhibitor";
  version = "1.5.6";

  src = fetchFromGitHub {
    owner = "soabase";
    repo = "exhibitor";
    sha256 = "07vikhkldxy51jbpy3jgva6wz75jksch6bjd6dqkagfgqd6baw45";
    rev = "5fcdb411d06e8638c2380f7acb72a8a6909739cd";
  };
  mavenDependenciesSha256 = "sha256-oGd8PFF1Z9BElNsgqbC/llQm8j/T+T01VwvSw3tTU0E=";
  # This is adapted from https://github.com/volth/nixpkgs/blob/6aa470dfd57cae46758b62010a93c5ff115215d7/pkgs/applications/networking/cluster/hadoop/default.nix#L20-L32
  fetchedMavenDeps = stdenv.mkDerivation {
    name = "exhibitor-${version}-maven-deps";
    inherit src nativeBuildInputs;
    buildPhase = ''
      cd ${pomFileDir};
      while timeout --kill-after=21m 20m mvn package -Dmaven.repo.local=$out/.m2; [ $? = 124 ]; do
        echo "maven hangs while downloading :("
      done
    '';
    installPhase = ''find $out/.m2 -type f \! -regex '.+\(pom\|jar\|xml\|sha1\)' -delete''; # delete files with lastModified timestamps inside
    outputHashAlgo = "sha256";
    outputHashMode = "recursive";
    outputHash = mavenDependenciesSha256;
    rev = "v${version}";
    hash = "sha256-PZRT2C4CfYCbaHE9tEnwpyzEsJ6ZaS//zUDweR4YKrI=";
  };

  # The purpose of this is to fetch the jar file out of public Maven and use Maven
  # to build a monolithic, standalone jar, rather than build everything from source
  # (given the state of Maven support in Nix). We're not actually building any java
  # source here.
  pomFileDir = "exhibitor-standalone/src/main/resources/buildscripts/standalone/maven";
  sourceRoot = "source/exhibitor-standalone/src/main/resources/buildscripts/standalone/maven";
  mvnFetchExtraArgs = {
    inherit sourceRoot;
  };
  mvnHash = "sha256-xhLnjtaF5eFUuBo5aHdp0j2sPfxYhFEZYJwVQlkqARs=";

  nativeBuildInputs = [ maven makeWrapper ];
  buildPhase = ''
      cd ${pomFileDir}
      mvn package --offline -Dmaven.repo.local=$(cp -dpR ${fetchedMavenDeps}/.m2 ./ && chmod +w -R .m2 && pwd)/.m2

  installPhase = ''
    mkdir -p $out/bin
    mkdir -p $out/share/java
    filename=$(basename target/*.jar)
    mv target/$filename $out/share/java/
    makeWrapper ${jdk}/bin/java $out/bin/startExhibitor.sh --add-flags "-jar $out/share/java/$filename" --suffix PATH : ${lib.makeBinPath [ jdk ]}
  '';

  meta = with lib; {
    description = "ZooKeeper co-process for instance monitoring, backup/recovery, cleanup and visualization";
    homepage = "https://github.com/soabase/exhibitor";
@@ -44,12 +39,4 @@ stdenv.mkDerivation rec {
    mainProgram = "startExhibitor.sh";
    platforms = platforms.unix;
  };

  installPhase = ''
    mkdir -p $out/bin
    mkdir -p $out/share/java
    mv target/$name.jar $out/share/java/
    makeWrapper ${jdk}/bin/java $out/bin/startExhibitor.sh --add-flags "-jar $out/share/java/$name.jar" --suffix PATH : ${lib.makeBinPath [ jdk ]}
  '';

}