nix: stop downloading POMs for Clojure dependencies
Clojure dependencies require only JARs to work. Downloading POMs is both a waste of time, space, and bandwidth. In addition POMs create edge cases that we would have to handle, an would rather avoid. For example, the `guice` package which shows up in the classpath includes a JAR named `guice-4.2.2-no_aop.jar`. The issue with that is that there is no corresponding POM in the directory: https://repo1.maven.org/maven2/com/google/inject/guice/4.2.2/ Either we have to make a special case for such packages, or we can just skip POMs entirely and avoid the mess. Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
a2794a120a
commit
d1442b306a
|
@ -12,12 +12,13 @@ By using the following command:
|
||||||
```sh
|
```sh
|
||||||
shadow-cljs classpath --force-spawn
|
shadow-cljs classpath --force-spawn
|
||||||
```
|
```
|
||||||
We both download the necessary JARs and POMs into `~/.m2` folder, but also get the classpath printed into standard output.
|
We download the necessary JARs into `~/.m2` folder, but also get the classpath printed into standard output.
|
||||||
|
We skip POM files since they are not necessary, and add edge cases we don't want to handle.
|
||||||
|
|
||||||
We then use the classpath in combination with contents of `~/.m2` folder to generate the following files:
|
We then use the classpath in combination with contents of `~/.m2` folder to generate the following files:
|
||||||
|
|
||||||
* `deps.list` - List of JARs relative to the `~/.m2` cache folder.
|
* `deps.list` - List of JARs relative to the `~/.m2` cache folder.
|
||||||
* `deps.json` - Full list of JARs and POMs including their SHAs.
|
* `deps.json` - Full list of JARs including their SHAs.
|
||||||
|
|
||||||
The `deps.list` file is just intermediate and for debugging purposes.
|
The `deps.list` file is just intermediate and for debugging purposes.
|
||||||
The `deps.json` is loaded by the derivation in [`default.nix`](./default.nix) and used to produce a derivation that contains all the necessary dependencies:
|
The `deps.json` is loaded by the derivation in [`default.nix`](./default.nix) and used to produce a derivation that contains all the necessary dependencies:
|
||||||
|
|
|
@ -8,9 +8,6 @@ let
|
||||||
# load dependencies
|
# load dependencies
|
||||||
deps = importJSON ./deps.json;
|
deps = importJSON ./deps.json;
|
||||||
|
|
||||||
# some .jar files have an `-aot` suffix that doesn't work for .pom files
|
|
||||||
getPOM = jarUrl: "${removeSuffix "-aot" jarUrl}.pom";
|
|
||||||
|
|
||||||
script = writeShellScriptBin "create-local-maven-repo" (''
|
script = writeShellScriptBin "create-local-maven-repo" (''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cd $out
|
cd $out
|
||||||
|
@ -18,18 +15,11 @@ let
|
||||||
(concatMapStrings (dep:
|
(concatMapStrings (dep:
|
||||||
let
|
let
|
||||||
url = "${dep.host}/${dep.path}";
|
url = "${dep.host}/${dep.path}";
|
||||||
pom = {
|
|
||||||
sha1 = attrByPath [ "pom" "sha1" ] "" dep;
|
|
||||||
sha256 = attrByPath [ "pom" "sha256" ] "" dep;
|
|
||||||
};
|
|
||||||
pom-download = optionalString (pom.sha256 != "") (
|
|
||||||
fetchurl { url = getPOM url; inherit (pom) sha256; }
|
|
||||||
);
|
|
||||||
jar = {
|
jar = {
|
||||||
sha1 = attrByPath [ "jar" "sha1" ] "" dep;
|
sha1 = attrByPath [ "jar" "sha1" ] "" dep;
|
||||||
sha256 = attrByPath [ "jar" "sha256" ] "" dep;
|
sha256 = attrByPath [ "jar" "sha256" ] "" dep;
|
||||||
};
|
};
|
||||||
jar-download = optionalString (jar.sha256 != "") (
|
jarFile = optionalString (jar.sha256 != "") (
|
||||||
fetchurl { url = "${url}.jar"; inherit (jar) sha256; }
|
fetchurl { url = "${url}.jar"; inherit (jar) sha256; }
|
||||||
);
|
);
|
||||||
fileName = last (splitString "/" dep.path);
|
fileName = last (splitString "/" dep.path);
|
||||||
|
@ -38,14 +28,8 @@ let
|
||||||
''
|
''
|
||||||
mkdir -p ${directory}
|
mkdir -p ${directory}
|
||||||
|
|
||||||
${optionalString (pom-download != "") ''
|
${optionalString (jarFile != "") ''
|
||||||
ln -s "${pom-download}" "${getPOM dep.path}"
|
ln -s "${jarFile}" "${dep.path}.jar"
|
||||||
''}
|
|
||||||
${optionalString (pom.sha1 != "") ''
|
|
||||||
echo "${pom.sha1}" > "${getPOM dep.path}.sha1"
|
|
||||||
''}
|
|
||||||
${optionalString (jar-download != "") ''
|
|
||||||
ln -s "${jar-download}" "${dep.path}.jar"
|
|
||||||
''}
|
''}
|
||||||
${optionalString (jar.sha1 != "") ''
|
${optionalString (jar.sha1 != "") ''
|
||||||
echo "${jar.sha1}" > "${dep.path}.jar.sha1"
|
echo "${jar.sha1}" > "${dep.path}.jar.sha1"
|
||||||
|
|
|
@ -53,8 +53,6 @@ function nix_entry_from_jar() {
|
||||||
JAR_PATH="${MAVEN_CACHE_PATH}/${JAR_REL_PATH}"
|
JAR_PATH="${MAVEN_CACHE_PATH}/${JAR_REL_PATH}"
|
||||||
JAR_NAME=$(basename "${JAR_PATH}")
|
JAR_NAME=$(basename "${JAR_PATH}")
|
||||||
JAR_DIR=$(dirname "${JAR_PATH}")
|
JAR_DIR=$(dirname "${JAR_PATH}")
|
||||||
# POM might have a slightly different name
|
|
||||||
POM_PATH=$(echo ${JAR_DIR}/*.pom)
|
|
||||||
|
|
||||||
REPO_NAME=$(get_repo_for_dir "${JAR_DIR}")
|
REPO_NAME=$(get_repo_for_dir "${JAR_DIR}")
|
||||||
REPO_URL=${REPOS[${REPO_NAME}]}
|
REPO_URL=${REPOS[${REPO_NAME}]}
|
||||||
|
@ -62,18 +60,11 @@ function nix_entry_from_jar() {
|
||||||
JAR_SHA1=$(cat "${JAR_PATH}.sha1")
|
JAR_SHA1=$(cat "${JAR_PATH}.sha1")
|
||||||
JAR_SHA256=$(get_nix_sha "${JAR_PATH}")
|
JAR_SHA256=$(get_nix_sha "${JAR_PATH}")
|
||||||
|
|
||||||
POM_SHA1=$(cat "${POM_PATH}.sha1")
|
|
||||||
POM_SHA256=$(get_nix_sha "${POM_PATH}")
|
|
||||||
|
|
||||||
# Format into a Nix attrset entry
|
# Format into a Nix attrset entry
|
||||||
echo -n "
|
echo -n "
|
||||||
{
|
{
|
||||||
\"path\": \"${JAR_REL_NAME}\",
|
\"path\": \"${JAR_REL_NAME}\",
|
||||||
\"host\": \"${REPO_URL}\",
|
\"host\": \"${REPO_URL}\",
|
||||||
\"pom\": {
|
|
||||||
\"sha1\": \"${POM_SHA1}\",
|
|
||||||
\"sha256\": \"${POM_SHA256}\"
|
|
||||||
},
|
|
||||||
\"jar\": {
|
\"jar\": {
|
||||||
\"sha1\": \"${JAR_SHA1}\",
|
\"sha1\": \"${JAR_SHA1}\",
|
||||||
\"sha256\": \"${JAR_SHA256}\"
|
\"sha256\": \"${JAR_SHA256}\"
|
||||||
|
|
Loading…
Reference in New Issue