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