1{
2 lib,
3 stdenv,
4 fetchurl,
5 jre,
6 makeWrapper,
7}:
8
9stdenv.mkDerivation rec {
10 pname = "google-java-format";
11 version = "1.28.0";
12
13 src = fetchurl {
14 url = "https://github.com/google/google-java-format/releases/download/v${version}/google-java-format-${version}-all-deps.jar";
15 sha256 = "sha256-MjQufBtGAPgN80cdpGrugBLT4URdXqG+H7cSibB8xzU=";
16 };
17
18 dontUnpack = true;
19
20 nativeBuildInputs = [ makeWrapper ];
21 buildInputs = [ jre ];
22
23 installPhase = ''
24 runHook preInstall
25
26 mkdir -p $out/{bin,share/${pname}}
27 install -D ${src} $out/share/${pname}/google-java-format-${version}-all-deps.jar
28
29 makeWrapper ${jre}/bin/java $out/bin/${pname} \
30 --argv0 ${pname} \
31 --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED" \
32 --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED" \
33 --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED" \
34 --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED" \
35 --add-flags "--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED" \
36 --add-flags "-jar $out/share/${pname}/google-java-format-${version}-all-deps.jar"
37
38 runHook postInstall
39 '';
40
41 meta = with lib; {
42 description = "Java source formatter by Google";
43 longDescription = ''
44 A program that reformats Java source code to comply with Google Java Style.
45 '';
46 homepage = "https://github.com/google/google-java-format";
47 sourceProvenance = with sourceTypes; [ binaryBytecode ];
48 license = licenses.asl20;
49 maintainers = [ maintainers.emptyflask ];
50 platforms = platforms.all;
51 mainProgram = "google-java-format";
52 };
53}