Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions pkgs/development/tools/jdt-language-server/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
{ lib
, stdenv
, fetchurl
, makeWrapper
, jdk
}:

stdenv.mkDerivation rec {
pname = "jdt-language-server";
version = "1.8.0";
timestamp = "202201261434";

src = fetchurl {
url = "https://download.eclipse.org/jdtls/milestones/${version}/jdt-language-server-${version}-${timestamp}.tar.gz";
sha256 = "0wlnsr72hncdqrbpgfl9hgwqw9d9rppq4iymnjmgfn51rjcqadv8";
};

sourceRoot = ".";

buildInputs = [
jdk
];

nativeBuildInputs = [
makeWrapper
];

installPhase =
let
# The application ships with config directories for linux and mac
configDir = if stdenv.isDarwin then "config_mac" else "config_linux";
in
''
# Copy jars
install -D -t $out/share/java/plugins/ plugins/*.jar

# Copy config directories for linux and mac
install -Dm 444 -t $out/share/config ${configDir}/*

# Get latest version of launcher jar
# e.g. org.eclipse.equinox.launcher_1.5.800.v20200727-1323.jar
launcher="$(ls $out/share/java/plugins/org.eclipse.equinox.launcher_* | sort -V | tail -n1)"

# The wrapper script will create a directory in the user's cache, copy in the config
# files since this dir can't be read-only, and by default use this as the runtime dir.
#
# The following options are required as per the upstream documentation:
#
# -Declipse.application=org.eclipse.jdt.ls.core.id1
# -Dosgi.bundles.defaultStartLevel=4
# -Declipse.product=org.eclipse.jdt.ls.core.product
# -noverify
# --add-modules=ALL-SYSTEM
# --add-opens java.base/java.util=ALL-UNNAMED
# --add-opens java.base/java.lang=ALL-UNNAMED
#
# The following options configure the server to run without writing logs to the nix store:
#
# -Dosgi.sharedConfiguration.area.readOnly=true
# -Dosgi.checkConfiguration=true
# -Dosgi.configuration.cascaded=true
# -Dosgi.sharedConfiguration.area=$out/share/config
#
# Other options which the caller may change:
#
# -Dlog.level:
# Log level.
# This can be overidden by setting JAVA_OPTS.
#
# The caller must specify the following:
#
# -data:
# The application stores runtime data here. We set this to <cache-dir>/$PWD
# so that projects don't collide with each other.
# This can be overidden by specifying -configuration to the wrapper.
#
# Java options, such as -Xms and Xmx can be specified by setting JAVA_OPTS.
#
makeWrapper ${jdk}/bin/java $out/bin/jdt-language-server \
--add-flags "-Declipse.application=org.eclipse.jdt.ls.core.id1" \
--add-flags "-Dosgi.bundles.defaultStartLevel=4" \
--add-flags "-Declipse.product=org.eclipse.jdt.ls.core.product" \
--add-flags "-Dosgi.sharedConfiguration.area=$out/share/config" \
--add-flags "-Dosgi.sharedConfiguration.area.readOnly=true" \
--add-flags "-Dosgi.checkConfiguration=true" \
--add-flags "-Dosgi.configuration.cascaded=true" \
--add-flags "-Dlog.level=ALL" \
--add-flags "-noverify" \
--add-flags "\$JAVA_OPTS" \
--add-flags "-jar $launcher" \
--add-flags "--add-modules=ALL-SYSTEM" \
--add-flags "--add-opens java.base/java.util=ALL-UNNAMED" \
--add-flags "--add-opens java.base/java.lang=ALL-UNNAMED"
'';

meta = with lib; {
homepage = "https://github.com/eclipse/eclipse.jdt.ls";
description = "Java language server";
license = licenses.epl20;
maintainers = with maintainers; [ matt-snider ];
};
}

2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -20367,6 +20367,8 @@ in

iwona = callPackage ../data/fonts/iwona { };

jdt-language-server = callPackage ../development/tools/jdt-language-server {};

jetbrains-mono = callPackage ../data/fonts/jetbrains-mono { };

jost = callPackage ../data/fonts/jost { };
Expand Down