I'm trying to package PDF4teachers into nixpkgs. Most java programs I saw provide a way to compile into a single .jar file that contains all dependencies, and then nix creates a wrapper that calls this .jar with the nix-package java version (possibly compiled with JavaFX support).
Provide a gradle task to build a self-contained jar file.
I tried to check if this was possible, but I couldn't find a way to do it cleanly. The build gradle task produces a file build/libs/source-v1.4.4.jar but it seems like this jar does not contain dependencies. I also tried to jlink target, but then I need to use the provided java with patchelfhook (a nixos "hack" to package proprietary software), but I feel like this is not the proper solution.
Note that I'm a java packager newby, so it may be the case that cleaner solutions exist, if you know them please let me know.
Here is the current state of my nix package. It works (but should be made cleaner since for now java is exported as a new public binary), but I feel like it's not the good solution.
{ lib
, stdenv
, fetchFromGitHub
, gradle_8
, makeWrapper
, jre
, jdk
, tree
, wrapGAppsHook3
, gobject-introspection
, autoPatchelfHook
}:
let jdkfx = jdk.override (
lib.optionalAttrs stdenv.hostPlatform.isLinux {
enableJavaFX = true;
# openjfx_jdk = openjfx.override { withWebKit = true; };
}
);
in
stdenv.mkDerivation (finalAttrs: {
pname = "PDF4Teachers";
version = "1.4.4";
src = fetchFromGitHub {
owner = "ClementGre";
repo = finalAttrs.pname;
rev = "${finalAttrs.version}";
sha256 = "sha256-0J/RVC8NXdyO1kFQOnA6TRKUBsQ6hr4bC4Ztaq1v63c=";
};
postPatch = ''
# Disable update check
substituteInPlace build.gradle \
--replace "javaHome.set('/home/clement/.jdks/corretto-21.0.4')" "javaHome.set('${jdkfx}/lib/openjdk')"
cat build.gradle
'';
nativeBuildInputs = [
gradle_8
makeWrapper
wrapGAppsHook3
gobject-introspection
autoPatchelfHook # Works but I feel like this is not the right solution
];
buildInputs = [
];
# if the package has dependencies, mitmCache must be set
mitmCache = gradle_8.fetchDeps {
# inherit (finalAttrs) pname;
pkg = finalAttrs.finalPackage;
data = ./deps.json;
};
# this is required for using mitm-cache on Darwin
__darwinAllowLocalNetworking = true;
gradleFlags = [
"-Dfile.encoding=utf-8"
];
# defaults to "assemble"
#gradleBuildTask = "shadowJar";
#gradleBuildTask = "build";
gradleBuildTask = "jlink";
#gradleBuildTask = "jar";
installPhase = ''
${tree}/bin/tree
mkdir -p $out/{bin,lib,conf}
#cp -r build/image/PDF4Teachers-lin/bin/PDF4Teachers $out/bin
cp -r build/image/PDF4Teachers-lin/bin/* $out/bin
cp -r build/image/PDF4Teachers-lin/conf/* $out/conf
cp -r build/image/PDF4Teachers-lin/lib/* $out/lib
mkdir -p $out/build
cp -r build/ $out/build
#cp -r build/ $out
# mkdir -p $out/{bin,share/pdftk}
# cp build/libs/pdftk-all.jar $out/share/pdftk
# makeWrapper ${lib.getExe jre} $out/bin/pdftk \
# --add-flags "-jar $out/share/pdftk/pdftk-all.jar"
# cp ${finalAttrs.src}/pdftk.1 $out/share/man/man1
'';
postFixup = ''
'';
meta = with lib; {
homepage = "https://pdf4teachers.org/";
description = "Rediscover the annotation and grading of assessments";
license = licenses.asl20;
maintainers = with maintainers; [ tobiasBora ];
platforms = platforms.unix;
sourceProvenance = with lib.sourceTypes; [
fromSource
binaryBytecode # mitm cache
];
};
})
{
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
"!version": 1,
"https://clojars.org": {
"repo/google-diff-match-patch#google-diff-match-patch/0.1": {
"jar": "sha256-CmgZSv2aZhfjSWfaHXcxe+mHz7Mi79wt0Id0cAR1JW8=",
"pom": "sha256-3GD/0wLNVGlMAmEmVn0QAUopCSrrzZw50DxBq4GElcI="
}
},
"https://jitpack.io": {
"com/github/Dansoftowner#jSystemThemeDetector/3.9.1": {
"jar": "sha256-eJ+Z9+T6fOzZ/N9Rrclxjodtmr5MQ+dIAZn5dDgynxM=",
"module": "sha256-J/HNSDQmh7t/zYkB8N58yoEyrm2qG3fG3gKN54uXItc=",
"pom": "sha256-+JipzNZJVA17d97rnodpuPgkJFboCsZz2wJaDaR8bEk="
}
},
"https://plugins.gradle.org/m2": {
"com/google/code/findbugs#jsr305/3.0.2": {
"jar": "sha256-dmrSoHg/JoeWLIrXTO7MOKKLn3Ki0IXuQ4t4E+ko0Mc=",
"pom": "sha256-GYidvfGyVLJgGl7mRbgUepdGRIgil2hMeYr+XWPXjf4="
},
"com/google/gradle#osdetector-gradle-plugin/1.7.3": {
"jar": "sha256-a0aS+ROiGx+2Axae54uo8+SrKvnXYq+cqIt5EmwcCtE=",
"pom": "sha256-hGDJUBJ8o1mHZhYeOLT/jWO01p+4MQoW4As1E1ABDBE="
},
"kr/motd/maven#os-maven-plugin/1.7.1": {
"jar": "sha256-9Hru+Ggh5SsrGHWJeL0EXwPXIikuMudHCCEixiKJUuA=",
"pom": "sha256-S3WABEIrljPdMY8p54Tx0YC9ilkgzVCvGTCGH21qVHY="
},
"org/beryx#badass-jlink-plugin/3.0.1": {
"jar": "sha256-dgjXY18yKiLff//d+IiBuTngqBDuUmoqTFPFN7/WT4Y=",
"module": "sha256-b3ksJpweGUNdCWcOtY12cyOFm2Hpt9YcZLPMdHK8Qgo=",
"pom": "sha256-OwPpihIF17Spe7jcvlkCs6AW4D+FACDzkjuIWomh2zM="
},
"org/beryx/jlink#org.beryx.jlink.gradle.plugin/3.0.1": {
"pom": "sha256-MRg/jaYel0ILAf4NarvkrGfgYY5PxAEyfBu8HvoBCqw="
},
"org/gradlex#extra-java-module-info/1.8": {
"jar": "sha256-DmUlngVgVRWF8m7nmpxu3KZKvLJrRqMI4IkQHYxRjZI=",
"module": "sha256-QeguoT4SwDPQxnUenEUDi39pKmfsaBX/rXGGvnIADJE=",
"pom": "sha256-9vDz0yriO3QAVWsooBUT8VwUFfLnVtj5Av4UOfNknB0="
},
"org/gradlex/extra-java-module-info#org.gradlex.extra-java-module-info.gradle.plugin/1.8": {
"pom": "sha256-jig1ITCS2OahjUwF9APLaTKStj3hPolMR9l/c0T401w="
},
"org/openjfx#javafx-plugin/0.1.0": {
"jar": "sha256-Xq7sB5m0QGRrDKTP2iGaMttr4rpXktAyoNpKOlw4j6s=",
"module": "sha256-rf+3RA0kntF8BJOD1nBp+UU7F3gncMAFtoKkNBbYNmE=",
"pom": "sha256-NMjfVSfrWjXl8AmjzeH3oInEzkoOclgC8uy+UDu9PLY="
},
"org/openjfx/javafxplugin#org.openjfx.javafxplugin.gradle.plugin/0.1.0": {
"pom": "sha256-1tASf/Q2PQAXPDV6mByec+/wPDCl0Ohq2CtgVPrvqEE="
},
"org/ow2#ow2/1.5.1": {
"pom": "sha256-Mh3bt+5v5PU96mtM1tt0FU1r+kI5HB92OzYbn0hazwU="
},
"org/ow2/asm#asm/9.6": {
"jar": "sha256-PG+sJCTbPUqFO2afTj0dnDxVIjXhmjGWc/iHCDwjA6E=",
"pom": "sha256-ku7iS8PIQ+SIHUbB3WUFRx7jFC+s+0ZrQoz+paVsa2A="
},
"org/sonatype/oss#oss-parent/7": {
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
},
"org/sonatype/oss#oss-parent/9": {
"pom": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno="
}
},
"https://repo.maven.apache.org/maven2": {
"com/adobe/xmp#xmpcore/6.1.11": {
"jar": "sha256-j3AzxXm5n6DZ1t3LlEiHW15LV3w1AAInjORpl9Z4tzc=",
"pom": "sha256-cZEYGCECwlM+kqL2fANRAmTmFgVxpzishj51cSQXMj0="
},
"com/drewnoakes#metadata-extractor/2.19.0": {
"jar": "sha256-5Ru0VO0I6iv8w60UfQiK0apzqZngByVj+K5QAhovyts=",
"pom": "sha256-fqXDxPtl2ERBve2oMsDprgToozurEcr4J6tOWXtjsu0="
},
"com/fasterxml#oss-parent/58": {
"pom": "sha256-VnDmrBxN3MnUE8+HmXpdou+qTSq+Q5Njr57xAqCgnkA="
},
"com/fasterxml/jackson#jackson-base/2.17.1": {
"pom": "sha256-4K78YdOPzd2VX/7sAbt1EE8bv/+jpuy1jb50r7cV4yI="
},
"com/fasterxml/jackson#jackson-bom/2.17.1": {
"pom": "sha256-n0RhIo4SkQPu16MC3BABqy5Mgt086pFcKn27jMYe/SU="
},
"com/fasterxml/jackson#jackson-parent/2.17": {
"pom": "sha256-rubeSpcoOwQOQ/Ta1XXnt0eWzZhNiSdvfsdWc4DIop0="
},
"com/fasterxml/jackson/core#jackson-core/2.17.1": {
"jar": "sha256-3bJsih8ahFNeghPEizWyUzcENOMoezzxV3eFb8TljOY=",
"module": "sha256-iowJZP38Js7bso2CXfRiGBf7jNIrnnpZ2cdKOl8b3R0=",
"pom": "sha256-2UiDEgmgTAE5G5Oq7nrTShyelIY/nnaFwvW2FJoqs50="
},
"com/github/davidmoten#sonatype-parent/0.1": {
"pom": "sha256-9Q5Goo6n4j+EMErZ/xsqWJskdSy0R9nq7eb1r4T56s4="
},
"com/github/jai-imageio#jai-imageio-core/1.4.0": {
"jar": "sha256-itPGjp7/+xCsh/+LxYmt9ksEpynFGUwHnv0GQ2B/1yo=",
"pom": "sha256-Ac0LjPRGoe4kVuyeg8Q11gRH0G6fVJBMTm/sCPfO8qw="
},
"com/github/jai-imageio#jai-imageio-jpeg2000/1.4.0": {
"jar": "sha256-B/tuOjBAEiuEbF5SUgAzF1wyUeLsiDDfgvh8sh84i7E=",
"pom": "sha256-jQd0KBAHliclrx93swfN6BbP1+4loQxTI3nW41ZMvh4="
},
"com/github/oshi#oshi-core/5.8.6": {
"jar": "sha256-avZFtrMZxaH+alrAPB+0seypajtifK6JU1L5ibcgkBc=",
"pom": "sha256-iNcNOxnby2YuXDxFceX8mavCZldu+Cv6u7RGkm9MISo="
},
"com/github/oshi#oshi-parent/5.8.6": {
"pom": "sha256-Fe+B2OTv+TYQPJ+HYGMM7LNXs5OGTFuvnKWHQTOzkMc="
},
"com/google/code/gson#gson-parent/2.8.6": {
"pom": "sha256-NzZGOFnsGSZyleiUlAroKo9oRBMDESL+Nc58/34wp3Q="
},
"com/google/code/gson#gson/2.8.6": {
"jar": "sha256-yPtIOQVNKAswM/gA0fWpfeLwKOuLoutFitKH5Tbz8l8=",
"pom": "sha256-IXRBWmRzMtMP2gS9HPxwij7MhOr3UX9ZYYjYJE4QORE="
},
"com/opencsv#opencsv/5.9": {
"jar": "sha256-ICOWm4bOlorYrlSWSKxYfRQcGa5oSppcZ8kQXzerDRw=",
"pom": "sha256-l+UC78Xmwt0VZiGynKy8D0dEIowAmPaxafV/eukwMGA="
},
"commons-beanutils#commons-beanutils/1.9.4": {
"jar": "sha256-fZOMgXiQKARcCMBl6UvnX8KAUnYg1b1itRnVg4UyNoo=",
"pom": "sha256-w1zKe2HUZ42VeMvAuQG4cXtTmr+SVEQdp4uP5g3gZNA="
},
"commons-collections#commons-collections/3.2.2": {
"jar": "sha256-7urpF5FxRKaKdB1MDf9mqlxcX9hVk/8he87T/Iyng7g=",
"pom": "sha256-1dgfzCiMDYxxHDAgB8raSqmiJu0aES1LqmTLHWMiFws="
},
"commons-io#commons-io/2.11.0": {
"jar": "sha256-lhsvbYfbrMXVSr9Fq3puJJX4m3VZiWLYxyPOqbwhCQg=",
"pom": "sha256-LgFv1+MkS18sIKytg02TqkeQSG7h5FZGQTYaPoMe71k="
},
"commons-logging#commons-logging/1.2": {
"pom": "sha256-yRq1qlcNhvb9B8wVjsa8LFAIBAKXLukXn+JBAHOfuyA="
},
"commons-logging#commons-logging/1.3.0": {
"jar": "sha256-ZtPJgEcLmbDFEdrT38CueyZewfsUTpa8AlOooXX9NNk=",
"pom": "sha256-je/afOtIiP/k1OYyeJVqGjxRS3W4Nj1nFqG9Zv6WLH8="
},
"de/jangassen#jfa/1.2.0": {
"jar": "sha256-8cwY8VldRBroOc2hRlwIsefbRrcsHX87NzIK4WQexys=",
"pom": "sha256-tNgod+BwsV0dTmdrQV9qVCnw4i3U75gX2F5MWcU7yr8="
},
"de/jangassen#nsmenufx/3.1.0": {
"jar": "sha256-cpEcwG3rujj45dA57CNC0u5nYhijMjqpWlzIqDOn3fQ=",
"pom": "sha256-RNGXv3eGUMJC0dats3Jt12D0yBywQcmX2S2yMhxR8Q4="
},
"de/rototor/pdfbox#graphics2d/3.0.2": {
"jar": "sha256-nc6GQd/8dloE2+FArgSvmH5B1CTuGfa50eNNkcMk2/s=",
"pom": "sha256-Hgmt+QDxAKt1bYYczLSDTIyqSa09PE+gre9BLyhJBvQ="
},
"de/rototor/pdfbox#pdfboxgraphics2d-parent/3.0.2": {
"pom": "sha256-2Bdl+fRUlr5Fii0++4JK1mpg9+mJR2hSl4hyUio5gfE="
},
"io/github/g00fy2#versioncompare/1.4.1": {
"jar": "sha256-0mgnvHDjpuBw9bco4vhNvwopE5siGBr2Vm4MFvCNRGU=",
"module": "sha256-rHAoh4apAuF5CeYvf7dyrkIcRgqxDnIAtQIfWONIE2w=",
"pom": "sha256-6nUQLRXjrmYp7wResnYd5EAyW24RYSjC8P1MFj3Slj0="
},
"net/java/dev/jna#jna-platform/5.12.1": {
"jar": "sha256-jOlpEWyslb1hsHqNXgcXSzUuYzAUc8qscsOV48CEiNI=",
"pom": "sha256-wnn/o7UWjiIDCHIxxjiRmnzsdFgAaxzaZpWXR4YPtFc="
},
"net/java/dev/jna#jna/5.12.1": {
"jar": "sha256-kagUrE9A1g3ukdhC4aith0xiGXmEQD0OPDDTnlXPU7M=",
"pom": "sha256-Zf8lhJuthZVUtQMXeS9Wia20UprkAx6aUkYxnLK4U1Y="
},
"org/apache#apache/13": {
"pom": "sha256-/1E9sDYf1BI3vvR4SWi8FarkeNTsCpSW+BEHLMrzhB0="
},
"org/apache#apache/16": {
"pom": "sha256-n4X/L9fWyzCXqkf7QZ7n8OvoaRCfmKup9Oyj9J50pA4="
},
"org/apache#apache/18": {
"pom": "sha256-eDEwcoX9R1u8NrIK4454gvEcMVOx1ZMPhS1E7ajzPBc="
},
"org/apache#apache/19": {
"pom": "sha256-kfejMJbqabrCy69tAf65NMrAAsSNjIz6nCQLQPHsId8="
},
"org/apache#apache/21": {
"pom": "sha256-rxDBCNoBTxfK+se1KytLWjocGCZfoq+XoyXZFDU3s4A="
},
"org/apache#apache/23": {
"pom": "sha256-vBBiTgYj82V3+sVjnKKTbTJA7RUvttjVM6tNJwVDSRw="
},
"org/apache#apache/29": {
"pom": "sha256-PkkDcXSCC70N9jQgqXclWIY5iVTCoGKR+mH3J6w1s3c="
},
"org/apache#apache/3": {
"pom": "sha256-OTxQr7S3qm61flN3pVoaBhCxn3W1Ls4BMI2wShGHog4="
},
"org/apache#apache/30": {
"pom": "sha256-Y91KOTqcDfyzFO/oOHGkHSQ7yNIAy8fy0ZfzDaeCOdg="
},
"org/apache#apache/31": {
"pom": "sha256-VV0MnqppwEKv+SSSe5OB6PgXQTbTVe6tRFIkRS5ikcw="
},
"org/apache#apache/7": {
"pom": "sha256-E5fOHbQzrcnyI9vwdJbRM2gUSHUfSuKeWPaOePtLbCU="
},
"org/apache/commons#commons-collections4/4.4": {
"jar": "sha256-Hfi5QwtcjtFD14FeQD4z71NxskAKrb6b2giDdi4IRtE=",
"pom": "sha256-JxvWc4Oa9G5zr/lX4pGNS/lvWsT2xs9NW+k/0fEnHE0="
},
"org/apache/commons#commons-lang3/3.13.0": {
"jar": "sha256-gvUoz3GMejwvMPxbx4TjxqChCxdgXa254WyC7eEeYGQ=",
"pom": "sha256-/3zqTrI53WIRdRDavlGo1fDJ5MxCa8PowsIhpxj4ZIQ="
},
"org/apache/commons#commons-parent/34": {
"pom": "sha256-Oi5p0G1kHR87KTEm3J4uTqZWO/jDbIfgq2+kKS0Et5w="
},
"org/apache/commons#commons-parent/39": {
"pom": "sha256-h80n4aAqXD622FBZzphpa7G0TCuLZQ8FZ8ht9g+mHac="
},
"org/apache/commons#commons-parent/47": {
"pom": "sha256-io7LVwVTv58f+uIRqNTKnuYwwXr+WSkzaPunvZtC/Lc="
},
"org/apache/commons#commons-parent/48": {
"pom": "sha256-Hh996TcKe3kB8Sjx2s0UIr504/R/lViw954EwGN8oLQ="
},
"org/apache/commons#commons-parent/52": {
"pom": "sha256-ddvo806Y5MP/QtquSi+etMvNO18QR9VEYKzpBtu0UC4="
},
"org/apache/commons#commons-parent/58": {
"pom": "sha256-LUsS4YiZBjq9fHUni1+pejcp2Ah4zuy2pA2UbpwNVZA="
},
"org/apache/commons#commons-parent/64": {
"pom": "sha256-bxljiZToNXtO1zRpb5kgV++q+hI1ZzmYEzKZeY4szds="
},
"org/apache/commons#commons-parent/65": {
"pom": "sha256-bPNJX8LmrJE6K38uA/tZCPs/Ip+wbTNY3EVnjVrz424="
},
"org/apache/commons#commons-text/1.11.0": {
"jar": "sha256-Ks8woHCxkWPVpIDq5BGigTQehwAg41NMbV1MhHJznjA=",
"pom": "sha256-O0AZecBkEoXYUM8Ri04Y8EmsIj3Hherk0LNXKPxTTRE="
},
"org/apache/pdfbox#fontbox/3.0.2": {
"jar": "sha256-ds8EEOkD49txQDKvu0WNWiO5IlO5/fiAA18J6orTraw=",
"pom": "sha256-hthT5W8q+Yb6c1s/kH6jh6KXNCLH0F8TwDasuRNal90="
},
"org/apache/pdfbox#jbig2-imageio/3.0.4": {
"jar": "sha256-KcspUWIvEKz2H9BlbE5vpVYhlKkJX3odJqpCbi9rF+s=",
"pom": "sha256-KOp8SskuCYX3lqi8aJCnvviSZwetrf0eLIVsmwvho4s="
},
"org/apache/pdfbox#pdfbox-io/3.0.2": {
"jar": "sha256-nW535C437zaC53aBEpwxRRXog9UKvB3aljguejHnDjg=",
"pom": "sha256-yD3gYR+UMN4W2dakjfXJEPgrkfHgU1xB9Woy9iYwz0c="
},
"org/apache/pdfbox#pdfbox-parent/3.0.2": {
"pom": "sha256-kN6rEjTjkUu8B07Ax3Y7+kFHgICziISpOwtVVxnWY0g="
},
"org/apache/pdfbox#pdfbox/3.0.2": {
"jar": "sha256-yv4sysEB6ao63z9+p23/AuWIWislWLdfr/l0dvBIfuI=",
"pom": "sha256-wMNAwn6AF2V+Y81PaJUG8U03Y10NFebRpAjysZFGax8="
},
"org/apache/xmlgraphics#batik-awt-util/1.17": {
"jar": "sha256-f+OPlFHrlFdSFDIyYcgZK2Px39JhBlklX7u7/elKKmY=",
"pom": "sha256-K0uhvyKqtiKmdyIXZTnRlWJ92KVfggGRq0udbh/PrgI="
},
"org/apache/xmlgraphics#batik-constants/1.17": {
"jar": "sha256-ddsAGAveTvXK7jkW1vZeUEUFHVnPUdV+ZzwDlp17u80=",
"pom": "sha256-BtbvBrb+NCkKDiopaz95YejFX18VgvCVIcguAAt5Px8="
},
"org/apache/xmlgraphics#batik-i18n/1.17": {
"jar": "sha256-1aZGgDY+ezaz8ow0o6U2126Ef3fOwHQKq3x5mme1LYs=",
"pom": "sha256-LczXNOp8Pf3cOQDcrOgYGIsUZsAq6dqK4wpwj3Tw9MI="
},
"org/apache/xmlgraphics#batik-parser/1.17": {
"jar": "sha256-XkSLv69hJ1Z/QfaY7iWtebhENjBxwS0RdYlseIkXF9c=",
"pom": "sha256-O4WKAV0DzUCF+HnRF81IbyijM3IIG0oRL/w5OjPzMOs="
},
"org/apache/xmlgraphics#batik-shared-resources/1.17": {
"jar": "sha256-XXQYK5yhns2NSBTy/0tCpK7qbhiXfpBcyE6Kb4GUDJ8=",
"pom": "sha256-ut4U1rq9//BiLBjNPCUf9flZN4MFieL2jgO92nu1RxE="
},
"org/apache/xmlgraphics#batik-util/1.17": {
"jar": "sha256-oeT3Q8i4CsaC7dSzl/qkrELeWRNDA2MkyA7o8ilzyXY=",
"pom": "sha256-gtWFfUG9TeWskX7sgSoz0zKXN04UOAew4KYt7KBVofk="
},
"org/apache/xmlgraphics#batik-xml/1.17": {
"jar": "sha256-+8wjAAZqxAQodsUsMnrN8LUVli8WkEAO16eO0sDUwbQ=",
"pom": "sha256-0ypeBt4LkxxN2ebgS/oSQHwkNwmmmNdpZ7TnkYoPLn0="
},
"org/apache/xmlgraphics#batik/1.17": {
"pom": "sha256-D9ZlDtWtkmuw6X2xx/yMJqQOOmtrShOxR2XryjKvsTo="
},
"org/apache/xmlgraphics#xmlgraphics-commons/2.9": {
"jar": "sha256-Lr0zOrKmJFFHk8M2468IZghnMob+N7oeY54Kw+G1i+I=",
"pom": "sha256-CS1SCmHKS4pFkEN0JMQhzbDPQOeYrs7PKwUm8q+PH4g="
},
"org/controlsfx#controlsfx/11.2.1": {
"jar": "sha256-63VY0JTDa4Yw6oqab40k+K9F0ak6N14R4gbXbAgiFDA=",
"pom": "sha256-veC6xL8EPqp19uTOEbpXfHneak+5Mfd1e93Y36MwKTc="
},
"org/jetbrains#annotations/24.0.0": {
"jar": "sha256-/xEvVM6HS4romc/WjwMV2WyfQGozi47KgMdtEOLlovc=",
"pom": "sha256-q4eN2sP6teB48NqVHqvWf77d09KvFzn+t/lHFgJ1Xws="
},
"org/jfxtras#jmetro/11.6.16": {
"jar": "sha256-X6v+k5kULSxCzepdifdJ0n1e8N01698l4LYwkspZ3vE=",
"pom": "sha256-zRJGTYfPiIZTRNQ12wQtbuNsHgs+C+ik+orKAn4r/Ws="
},
"org/junit#junit-bom/5.10.0": {
"module": "sha256-6z7mEnYIAQaUqJgFbnQH0RcpYAOrpfXbgB30MLmIf88=",
"pom": "sha256-4AbdiJT5/Ht1/DK7Ev5e2L5lZn1bRU+Z4uC4xbuNMLM="
},
"org/junit#junit-bom/5.10.1": {
"module": "sha256-IbCvz//i7LN3D16wCuehn+rulOdx+jkYFzhQ2ueAZ7c=",
"pom": "sha256-IcSwKG9LIAaVd/9LIJeKhcEArIpGtvHIZy+6qzN7w/I="
},
"org/junit#junit-bom/5.10.2": {
"module": "sha256-3iOxFLPkEZqP5usXvtWjhSgWaYus5nBxV51tkn67CAo=",
"pom": "sha256-Fp3ZBKSw9lIM/+ZYzGIpK/6fPBSpifqSEgckzeQ6mWg="
},
"org/junit#junit-bom/5.7.2": {
"module": "sha256-87zrHFndT2mT9DBN/6WAFyuN9lp2zTb6T9ksBXjSitg=",
"pom": "sha256-zRSqqGmZH4ICHFhdVw0x/zQry6WLtEIztwGTdxuWSHs="
},
"org/junit#junit-bom/5.9.3": {
"module": "sha256-tAH9JZAeWCpSSqU0PEs54ovFbiSWHBBpvytLv87ka5M=",
"pom": "sha256-TQMpzZ5y8kIOXKFXJMv+b/puX9KIg2FRYnEZD9w0Ltc="
},
"org/openjfx#javafx-base/22": {
"pom": "sha256-XPr4AKyei29O5+mOaRZvN0PAo+xyLhx8idLaEzmgQIE="
},
"org/openjfx#javafx-base/22/linux": {
"jar": "sha256-guS1JYZGAz4MvYzoYKBZWGDIwNeOrfXKWQ9FNps7PQ8="
},
"org/openjfx#javafx-controls/22": {
"pom": "sha256-8AZSRCn/IPdz+tfjwXq9/qkkzMeqGamSoeQZPl/kCA8="
},
"org/openjfx#javafx-controls/22/linux": {
"jar": "sha256-4E5POGe18PR56yKJsDgwPOn7TR3vImvJHCkYlpvzW2s="
},
"org/openjfx#javafx-fxml/22": {
"pom": "sha256-N2R+Lpsq+3hcJKu2GjjD5p02av/TUyv6J+jIrm92tPI="
},
"org/openjfx#javafx-fxml/22/linux": {
"jar": "sha256-K5X/HQ+4GUIrIU2Xs423Bc2alyMK41P0kr3UiJujqdY="
},
"org/openjfx#javafx-graphics/22": {
"pom": "sha256-snXDI9Pbr1/anOegMkG/JEvfeJ5GFON+pMPjww4P858="
},
"org/openjfx#javafx-graphics/22/linux": {
"jar": "sha256-ACrpnQ8ML2Clh72fkRaP7lvZ2AJ4H0eXV1lWz0icJLs="
},
"org/openjfx#javafx-swing/22": {
"pom": "sha256-wPQryYkBk3076g85BuQT1HvgXNsaWu7FbRw5JD2DM5w="
},
"org/openjfx#javafx-swing/22/linux": {
"jar": "sha256-JTdrxDkPNwbv3wlfQLGAZt9DWkNlufS99GGOWFZexZA="
},
"org/openjfx#javafx/22": {
"pom": "sha256-ZO+kxQXukz+S0/4hqQ7RVKKs1Dhif6hKHYG7jRZWN58="
},
"org/scilab/forge#jlatexmath-font-cyrillic/1.0.7": {
"jar": "sha256-GgFQ5L5k24jCUN/0H1kzSfVfDJz9uOOUM/Fbpz7NIbg=",
"pom": "sha256-kburwRXaL3ZznId52afCXWmNjI5/CRCrqgehNwO2oi0="
},
"org/scilab/forge#jlatexmath-font-greek/1.0.7": {
"jar": "sha256-zdx+fm8+f/BDTIpIBercPp3IBFfVgtGcNpnmqu6PavI=",
"pom": "sha256-Y4k7Qay6GJQvIt8WO5Cex5yqLzRxjXvmJEeNQ7P6/mo="
},
"org/scilab/forge#jlatexmath-parent/1.0.7": {
"pom": "sha256-1dUNpkwZJfPGVwiUI2nakFsYSyIBB5ueJntlLWM5Beg="
},
"org/scilab/forge#jlatexmath/1.0.7": {
"jar": "sha256-bQTDhD/JjS7qm6TP8L57gFQMp1xaTgs0Y/0SGcSMxl0=",
"pom": "sha256-w7H6Icz/7VRUA6U8EPte8MoMrT+ZCLIASoIjaItyLcg="
},
"org/slf4j#slf4j-api/1.7.32": {
"jar": "sha256-NiT4R0wa9G11+YvAl9eGSjI8gbOAiqQ2iabhxgHAJ74=",
"pom": "sha256-ABzeWzxrqRBwQlz+ny5pXkrri8KQotTNllMRJ6skT+U="
},
"org/slf4j#slf4j-parent/1.7.32": {
"pom": "sha256-WrNJ0PTHvAjtDvH02ThssZQKL01vFSFQ4W277MC4PHA="
},
"org/sonatype/oss#oss-parent/7": {
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
},
"org/yaml#snakeyaml/2.2": {
"jar": "sha256-FGeTFEiggXaWrigFt7iyC/sIJlK/nE767VKJMNxJOJs=",
"pom": "sha256-6YLq3HiMac8uTeUKn2MrGCwx26UGEoMNNI/EtLqN19Y="
},
"tk/pratanumandal#unique4j/1.4": {
"jar": "sha256-iggqU749AnoVauGgtfb+iGNzH2QSasQTW/t//3efc+s=",
"pom": "sha256-m59rkEM/a/ImQgXLfuTZz5PBGgzq9B05b6neU88o80Q="
},
"xml-apis#xml-apis-ext/1.3.04": {
"jar": "sha256-0LSIfcNNV95JB0pYr/rUOaAT0Lr/oagDT47ypeoZFkY=",
"pom": "sha256-G1k5qTEKWcDfDANyZyHV/JUh6H1sIDv6ciC66Cow2eg="
}
}
}
Prerequisite
Is your feature request related to a problem? Please describe.
I'm trying to package PDF4teachers into nixpkgs. Most java programs I saw provide a way to compile into a single
.jarfile that contains all dependencies, and then nix creates a wrapper that calls this.jarwith the nix-package java version (possibly compiled with JavaFX support).See for instance these packages involving JavaFX + external dependencies:
Describe the solution you'd like
Provide a gradle task to build a self-contained jar file.
Describe alternatives you've considered
I tried to check if this was possible, but I couldn't find a way to do it cleanly. The
buildgradle task produces a filebuild/libs/source-v1.4.4.jarbut it seems like this jar does not contain dependencies. I also tried tojlinktarget, but then I need to use the provided java with patchelfhook (a nixos "hack" to package proprietary software), but I feel like this is not the proper solution.Note that I'm a java packager newby, so it may be the case that cleaner solutions exist, if you know them please let me know.
Additional context
Here is the current state of my nix package. It works (but should be made cleaner since for now java is exported as a new public binary), but I feel like it's not the good solution.
with the following deps.json: