summary refs log tree commit diff
path: root/pkgs/build-support/build-maven.nix
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2015-06-21 22:24:03 -0400
committerShea Levy <shea@shealevy.com>2015-06-21 22:24:03 -0400
commitf63e764bb6bf636ddcdfb841072cdc4ef3712135 (patch)
tree72acbfa724ac1d9e17061e17b045d40fbf0ea5cd /pkgs/build-support/build-maven.nix
parent30bda340f5ce1f07c2272d1eb190ec5beab0297c (diff)
downloadnixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.tar
nixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.tar.gz
nixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.tar.bz2
nixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.tar.lz
nixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.tar.xz
nixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.tar.zst
nixpkgs-f63e764bb6bf636ddcdfb841072cdc4ef3712135.zip
Add buildMaven
Diffstat (limited to 'pkgs/build-support/build-maven.nix')
-rw-r--r--pkgs/build-support/build-maven.nix58
1 files changed, 58 insertions, 0 deletions
diff --git a/pkgs/build-support/build-maven.nix b/pkgs/build-support/build-maven.nix
new file mode 100644
index 00000000000..bde95080e74
--- /dev/null
+++ b/pkgs/build-support/build-maven.nix
@@ -0,0 +1,58 @@
+{ stdenv, maven, runCommand, writeText, fetchurl, lib }:
+/* Takes an info file generated by mvn2nix
+ * (https://github.com/shlevy/mvn2nix-maven-plugin) and builds the maven
+ * project with it.
+ *
+ * repo: A local maven repository with the project's dependencies.
+ *
+ * settings: A settings.xml to pass to maven to use the repo.
+ *
+ * build: A simple build derivation that uses mvn compile and package to build
+ *        the project.
+ */
+infoFile: let
+  info = builtins.fromJSON (builtins.readFile infoFile);
+
+  repo = runCommand "maven-repository" {} ''
+    ${lib.concatStrings (map (dep: let
+      inherit (dep) url sha1 groupId artifactId version;
+
+      fetch = fetchurl { inherit url sha1; };
+    in ''
+      dir=$out/$(echo ${groupId} | sed 's|\.|/|g')/${artifactId}/${version}
+      mkdir -p $dir
+      ln -sv ${fetch} $dir/${fetch.name}
+    '') info.dependencies)}
+  '';
+
+  settings = writeText "settings.xml" ''
+    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
+                          http://maven.apache.org/xsd/settings-1.0.0.xsd">
+      <localRepository>${repo}</localRepository>
+    </settings>
+  '';
+
+  src = dirOf infoFile;
+in {
+  inherit repo settings;
+
+  build = stdenv.mkDerivation {
+    name = "${info.project.artifactId}-${info.project.version}.jar";
+
+    src = builtins.filterSource (path: type:
+      (toString path) != (toString (src + "/target")) &&
+        (toString path) != (toString (src + "/.git"))
+    ) src;
+
+    buildInputs = [ maven ];
+
+    buildPhase = "mvn --offline --settings ${settings} compile";
+
+    installPhase = ''
+      mvn --offline --settings ${settings} package
+      mv target/*.jar $out
+    '';
+  };
+}