diff options
author | Shea Levy <shea@shealevy.com> | 2015-06-21 22:24:03 -0400 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2015-06-21 22:24:03 -0400 |
commit | f63e764bb6bf636ddcdfb841072cdc4ef3712135 (patch) | |
tree | 72acbfa724ac1d9e17061e17b045d40fbf0ea5cd /pkgs/build-support | |
parent | 30bda340f5ce1f07c2272d1eb190ec5beab0297c (diff) | |
download | nixpkgs-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')
-rw-r--r-- | pkgs/build-support/build-maven.nix | 58 |
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 + ''; + }; +} |