anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / build-support / fetchmavenartifact / default.nix
blob0f3cd4e64dd61d4d864fa5b960f2f7e505ef083b
1 # Adaptation of the MIT-licensed work on `sbt2nix` done by Charles O'Farrell
3 { lib, fetchurl, stdenv }:
4 let
5   defaultRepos = [
6     "https://repo1.maven.org/maven2"
7     "https://oss.sonatype.org/content/repositories/releases"
8     "https://oss.sonatype.org/content/repositories/public"
9     "https://repo.typesafe.com/typesafe/releases"
10   ];
13 args@
14 { # Example: "org.apache.httpcomponents"
15   groupId
16 , # Example: "httpclient"
17   artifactId
18 , # Example: "4.3.6"
19   version
20 , # Example: "jdk11"
21   classifier ? null
22 , # List of maven repositories from where to fetch the artifact.
23   # Example: [ http://oss.sonatype.org/content/repositories/public ].
24   repos ? defaultRepos
25   # The `url` and `urls` parameters, if specified should point to the JAR
26   # file and will take precedence over the `repos` parameter. Only one of `url`
27   # and `urls` can be specified, not both.
28 , url ? ""
29 , urls ? []
30 , # The rest of the arguments are just forwarded to `fetchurl`.
31   ...
34 # only one of url and urls can be specified at a time.
35 assert (url == "") || (urls == []);
36 # if repos is empty, then url or urls must be specified.
37 assert (repos != []) || (url != "") || (urls != []);
39 let
40   pname = (lib.replaceStrings [ "." ] [ "_" ] groupId) + "_" + (lib.replaceStrings [ "." ] [ "_" ] artifactId);
41   suffix = lib.optionalString (classifier != null) "-${classifier}";
42   filename = "${artifactId}-${version}${suffix}.jar";
43   mkJarUrl = repoUrl:
44     lib.concatStringsSep "/" [
45       (lib.removeSuffix "/" repoUrl)
46       (lib.replaceStrings ["."] ["/"] groupId)
47       artifactId
48       version
49       filename
50     ];
51   urls_ =
52     if url != "" then [url]
53     else if urls != [] then urls
54     else map mkJarUrl repos;
55   jar =
56     fetchurl (
57       builtins.removeAttrs args [ "groupId" "artifactId" "version" "classifier" "repos" "url" ]
58       // { urls = urls_; name = "${pname}-${version}.jar"; }
59     );
61   stdenv.mkDerivation {
62     inherit pname version;
63     dontUnpack = true;
64     # By moving the jar to $out/share/java we make it discoverable by java
65     # packages packages that mention this derivation in their buildInputs.
66     installPhase = ''
67       mkdir -p $out/share/java
68       ln -s ${jar} $out/share/java/${filename}
69     '';
70     # We also add a `jar` attribute that can be used to easily obtain the path
71     # to the downloaded jar file.
72     passthru.jar = jar;
73   }