1{ lib, stdenv, fetchFromGitHub 2, jdk, maven 3, makeWrapper 4}: 5 6let 7 platform = 8 if stdenv.isLinux then "linux" 9 else if stdenv.isDarwin then "mac" 10 else if stdenv.isWindows then "windows" 11 else throw "unsupported platform"; 12in 13maven.buildMavenPackage rec { 14 pname = "java-language-server"; 15 version = "0.2.46"; 16 17 src = fetchFromGitHub { 18 owner = "georgewfraser"; 19 repo = pname; 20 # commit hash is used as owner sometimes forgets to set tags. See https://github.com/georgewfraser/java-language-server/issues/104 21 rev = "d7f4303cd233cdad84daffbb871dd4512a2c8da2"; 22 sha256 = "sha256-BIcfwz+pLQarnK8XBPwDN2nrdvK8xqUo0XFXk8ZV/h0="; 23 }; 24 25 mvnFetchExtraArgs.dontConfigure = true; 26 mvnParameters = "-DskipTests"; 27 mvnHash = "sha256-2uthmSjFQ43N5lgV11DsxuGce+ZptZsmRLTgjDo0M2w="; 28 29 nativeBuildInputs = [ jdk makeWrapper ]; 30 31 dontConfigure = true; 32 preBuild = '' 33 jlink \ 34 ${lib.optionalString (!stdenv.isDarwin) "--module-path './jdks/${platform}/jdk-13/jmods'"} \ 35 --add-modules java.base,java.compiler,java.logging,java.sql,java.xml,jdk.compiler,jdk.jdi,jdk.unsupported,jdk.zipfs \ 36 --output dist/${platform} \ 37 --no-header-files \ 38 --no-man-pages \ 39 --compress 2 40 ''; 41 42 installPhase = '' 43 runHook preInstall 44 45 mkdir -p $out/share/java/java-language-server 46 cp -r dist/classpath dist/*${platform}* $out/share/java/java-language-server 47 48 # a link is not used as lang_server_${platform}.sh makes use of "dirname $0" to access other files 49 makeWrapper $out/share/java/java-language-server/lang_server_${platform}.sh $out/bin/java-language-server 50 51 runHook postInstall 52 ''; 53 54 meta = with lib; { 55 description = "A Java language server based on v3.0 of the protocol and implemented using the Java compiler API"; 56 homepage = "https://github.com/georgewfraser/java-language-server"; 57 license = licenses.mit; 58 maintainers = with maintainers; [ hqurve ]; 59 }; 60}