From f9bca2bcab7e6dcc885f652da9b78350b24e62f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Mon, 7 Apr 2025 01:30:38 +0200 Subject: [PATCH] tika: bump jdk to 17, add option to disable GUI and use minimal jdk Upstream uses jdk 17 in their CI, too https://github.com/apache/tika/tree/2.9.3/.github/workflows --- nixos/modules/services/search/tika.nix | 5 +- pkgs/by-name/ti/tika/package.nix | 68 ++++++++++++++++++++------ 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/nixos/modules/services/search/tika.nix b/nixos/modules/services/search/tika.nix index 94096b6db29f..5ddd1a551e49 100644 --- a/nixos/modules/services/search/tika.nix +++ b/nixos/modules/services/search/tika.nix @@ -79,7 +79,10 @@ in serviceConfig = let - package = cfg.package.override { inherit (cfg) enableOcr; }; + package = cfg.package.override { + inherit (cfg) enableOcr; + enableGui = false; + }; in { Type = "simple"; diff --git a/pkgs/by-name/ti/tika/package.nix b/pkgs/by-name/ti/tika/package.nix index e137b2e2e95f..cbd1309bfbba 100644 --- a/pkgs/by-name/ti/tika/package.nix +++ b/pkgs/by-name/ti/tika/package.nix @@ -2,26 +2,41 @@ lib, stdenv, maven, - jdk8, + jdk17, + jre17_minimal, fetchFromGitHub, makeWrapper, mvnDepsHash ? null, + enableGui ? true, enableOcr ? true, + runCommand, tesseract, nixosTests, }: let mvnDepsHashes = { - "x86_64-linux" = "sha256-a2EIxok7Ov2QQntu3fpagzvMAQcBjKwcd1whDNdCm2E="; - "aarch64-linux" = "sha256-TUJmlnFJeYY4Pzrmd+9uKb07Tq7HYd4EnAXkbgGCFDk="; - "x86_64-darwin" = "sha256-OTctUd4lsH6Z6H7rDYbyAcrBmzpSzFELjPBRN8zUyhY="; - "aarch64-darwin" = "sha256-0tNFHEaxAEqrZTTrGCIX53K9MczkqIuDABD/bB6R1KU="; + "x86_64-linux" = "sha256-OTd51n6SSlFziqvvHmfyMAyQRwIzsHxFGuJ62zlX1Ec="; + "aarch64-linux" = "sha256-tPaGLqm0jgEoz0BD/C6AG9xupovQvib/v0kB/jjqwB8="; + "x86_64-darwin" = "sha256-Rs7nTiGazUW8oJJr6fbJKelzFqd2n278sJYoMy2/0N4="; + "aarch64-darwin" = "sha256-gnP+G33LPRMQ6HRzeZ8cEV9oSohrlPcMwlBB4rvH7+E="; }; knownMvnDepsHash = mvnDepsHashes.${stdenv.system} or (lib.warn "This platform doesn't have a default mvnDepsHash value, you'll need to specify it manually" lib.fakeHash); + + jdk = jre17_minimal.override { + modules = [ + "java.base" + "java.desktop" + "java.logging" + "java.management" + "java.naming" + "java.sql" + ]; + jdk = jdk17; + }; in maven.buildMavenPackage rec { pname = "tika"; @@ -43,30 +58,53 @@ maven.buildMavenPackage rec { "org.junit.platform:junit-platform-launcher:1.10.0" ]; - mvnJdk = jdk8; + mvnJdk = jdk17; mvnHash = if mvnDepsHash != null then mvnDepsHash else knownMvnDepsHash; - mvnParameters = toString [ - "-DskipTests=true" # skip tests (out of memory exceptions) - "-Dossindex.skip" # skip dependency with vulnerability (recommended by upstream) - ]; + mvnParameters = toString ( + [ + "-DskipTests=true" # skip tests (out of memory exceptions) + "-Dossindex.skip" # skip dependency with vulnerability (recommended by upstream) + ] + ++ lib.optionals (!enableGui) [ + "-am -pl :tika-server-standard" + ] + ); nativeBuildInputs = [ makeWrapper ]; installPhase = let - binPath = lib.makeBinPath ([ jdk8.jre ] ++ lib.optionals enableOcr [ tesseract ]); + flags = "--add-opens java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED"; + + binPath = lib.makeBinPath ( + [ + (runCommand "jdk-tika" + { + nativeBuildInputs = [ makeWrapper ]; + } + '' + makeWrapper ${jdk}/bin/java $out/bin/java \ + --add-flags "${flags}" + '' + ) + ] + ++ lib.optionals enableOcr [ tesseract ] + ); in '' runHook preInstall # Note: using * instead of version would match multiple files + '' + + lib.optionalString enableGui '' install -Dm644 tika-app/target/tika-app-${version}.jar $out/share/tika/tika-app.jar + makeWrapper ${jdk}/bin/java $out/bin/tika-app \ + --add-flags "${flags} -jar $out/share/tika/tika-app.jar" + '' + + '' install -Dm644 tika-server/tika-server-standard/target/tika-server-standard-${version}.jar $out/share/tika/tika-server.jar - - makeWrapper ${jdk8.jre}/bin/java $out/bin/tika-app \ - --add-flags "-jar $out/share/tika/tika-app.jar" - makeWrapper ${jdk8.jre}/bin/java $out/bin/tika-server \ + makeWrapper ${jdk}/bin/java $out/bin/tika-server \ --prefix PATH : ${binPath} \ --add-flags "-jar $out/share/tika/tika-server.jar"