summary refs log tree commit diff
path: root/gnu/packages/java.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/java.scm')
-rw-r--r--gnu/packages/java.scm1306
1 files changed, 607 insertions, 699 deletions
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index fdd849b8d6..cb1f524d5c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
-;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020, 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
   #:use-module (guix svn-download)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system maven)
@@ -58,6 +60,7 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages ghostscript) ;lcms
@@ -129,24 +132,11 @@
         (base32 "0lpbnb4dq4azmsvlhp6khq1gy42kyqyjv8gww74g5lm2y6blm4fa"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list "--enable-debuginfo" "--disable-static")
-       #:phases (modify-phases %standard-phases
-                  (replace 'configure
-                    (lambda* (#:key build target native-inputs inputs outputs
-                              (configure-flags '()) out-of-source? system
-                              #:allow-other-keys)
-                      (let ((configure (assoc-ref %standard-phases 'configure))
-                            (enable-64bit? (member system '("aarch64-linux"
-                                                            "x86_64-linux"
-                                                            "mips64el-linux"))))
-                        (configure #:build build #:target target
-                                   #:native-inputs native-inputs
-                                   #:inputs inputs #:outputs outputs
-                                   #:configure-flags `(,(if enable-64bit?
-                                                            "--enable-64bit"
-                                                            '())
-                                                       ,@configure-flags)
-                                   #:out-of-source? out-of-source?)))))))
+     `(#:configure-flags (list "--enable-debuginfo"
+                               "--disable-static"
+                               ,@(if (target-64bit?)
+                                  `("--enable-64bit")
+                                  '()))))
     (synopsis "ANTLR C Library")
     (description "LIBANTLR3C provides run-time C libraries for ANTLR3 (ANother
 Tool for Language Recognition v3).")
@@ -197,7 +187,7 @@ and binary format defined in The Java Virtual Machine Specification.")
            (delete 'configure)
            (add-before 'install 'fix-wrapper
              (lambda* (#:key inputs #:allow-other-keys)
-               (let ((jps (string-append (assoc-ref inputs "jdk") "/bin/jps")))
+               (let ((jps (search-input-file inputs "/bin/jps")))
                  (substitute* "bin/drip"
                    (("jps") jps)
                    (("brew update && brew upgrade drip") "guix pull && guix install drip")
@@ -242,13 +232,13 @@ only faster.")
               (sha256
                (base32
                 "0i99wf9xd3hw1sj2sazychb9prx8nadxh2clgvk3zlmb28v0jbfz"))
-              (patches (search-patches "classpath-aarch64-support.patch"))))
+              (patches (search-patches "classpath-aarch64-support.patch"
+                                       "classpath-miscompilation.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list (string-append "JAVAC="
-                            (assoc-ref %build-inputs "jikes")
-                            "/bin/jikes")
+                            (search-input-file %build-inputs "/bin/jikes"))
              "--disable-Werror"
              "--disable-gmp"
              "--disable-gtk-peer"
@@ -259,17 +249,6 @@ only faster.")
              "--disable-gjdoc")
        #:phases
        (modify-phases %standard-phases
-         ;; XXX: This introduces a memory leak as we remove a call to free up
-         ;; memory for the file name string.  This was necessary because of a
-         ;; runtime error that would have prevented us from building
-         ;; ant-bootstrap later.  See https://issues.guix.gnu.org/issue/36685
-         ;; for the gnarly details.
-         (add-after 'unpack 'remove-call-to-free
-           (lambda _
-             (substitute* "native/jni/java-io/java_io_VMFile.c"
-               (("result = cpio_isFileExists.*" m)
-                (string-append m "\n//")))
-             #t))
          (add-after 'install 'install-data
            (lambda _ (invoke "make" "install-data"))))))
     (native-inputs
@@ -373,19 +352,15 @@ JNI.")
        (modify-phases %standard-phases
          (delete 'bootstrap)
          (delete 'configure)
-         (replace 'build
+         (add-before 'build 'define-java-environment-variables
            (lambda* (#:key inputs #:allow-other-keys)
+             ;; First, set environment variables (eases debugging on -K).
              (setenv "JAVA_HOME" (assoc-ref inputs "jamvm"))
-             (setenv "JAVACMD"
-                     (string-append (assoc-ref inputs "jamvm")
-                                    "/bin/jamvm"))
-             (setenv "JAVAC"
-                     (string-append (assoc-ref inputs "jikes")
-                                    "/bin/jikes"))
-             (setenv "CLASSPATH"
-                     (string-append (assoc-ref inputs "jamvm")
-                                    "/lib/rt.jar"))
-
+             (setenv "JAVACMD" (search-input-file inputs "/bin/jamvm"))
+             (setenv "JAVAC" (search-input-file inputs "/bin/jikes"))
+             (setenv "CLASSPATH" (search-input-file inputs "/lib/rt.jar"))))
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
              ;; Ant complains if this file doesn't exist.
              (setenv "HOME" "/tmp")
              (with-output-to-file "/tmp/.ant.properties"
@@ -487,8 +462,7 @@ build process and its dependencies, whereas Make uses Makefile format.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CLASSPATH"
                      (string-join
-                      (cons (string-append (assoc-ref inputs "jamvm")
-                                           "/lib/rt.jar")
+                      (cons (search-input-file inputs "/lib/rt.jar")
                             (find-files (string-append
                                          (assoc-ref inputs "ant-bootstrap")
                                          "/lib")
@@ -935,6 +909,33 @@ machine.")))
                             "patches/hotspot/hs23/drop_unlicensed_test.patch")
                (("#!/bin/sh") (string-append "#!" (which "sh"))))
              #t))
+         (add-after 'unpack 'fix-openjdk
+           (lambda _
+             (substitute* "openjdk/jdk/make/common/Defs-linux.gmk"
+               (("CFLAGS_COMMON  = -fno-strict-aliasing" all)
+                (string-append all " -fcommon")))
+             (substitute* "openjdk/hotspot/src/share/vm/code/relocInfo.hpp"
+               (("inline friend relocInfo prefix_relocInfo\\(int datalen = 0\\);")
+                "inline friend relocInfo prefix_relocInfo(int datalen);"))
+             (substitute*
+                 '("openjdk/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                   "openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+               (("#include <sys/sysctl.h>")
+                "#include <linux/sysctl.h>"))
+             ;; It looks like the "h = 31 * h + c" line of the jsum()
+             ;; function gets miscompiled. After a few iterations of the loop
+             ;; the result of "31 * h" is always 0x8000000000000000.
+             ;; Bad optimization maybe...
+             ;; Transform "31 * h + c" into a convoluted "32 * h + c - h"
+             ;; as a workaround.
+             (substitute* "openjdk/hotspot/src/share/vm/memory/dump.cpp"
+               (("h = 31 \\* h \\+ c;")
+                "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;"))
+             ;; Our gcc version is higher than 4.3; replace the failing
+             ;; expression to test this by its result.
+             (substitute* "openjdk/jdk/make/sun/font/Makefile"
+               (("\"\\$\\(shell expr.*0\"")
+                "\"1\" \"0\""))))
          (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
              ;; buildtree.make generates shell scripts, so we need to replace
@@ -1103,6 +1104,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/")
                  (changeset "jdk6-b41")))
+           (file-name "jdk6-checkout")
            (sha256
             (base32
              "14q47yfg586fs64w30g8mk92m5dkxsvr36zzh0ra99xk5x0x96mv"))))
@@ -1112,6 +1114,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/jdk/")
                  (changeset "jdk6-b41")))
+           (file-name "jdk-checkout")
            (sha256
             (base32
              "165824nhg1k1dx6zs9dny0j49rmk35jw5b13dmz8c77jfajml4v9"))))
@@ -1121,6 +1124,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/hotspot/")
                  (changeset "jdk6-b41")))
+           (file-name "hotspot-checkout")
            (sha256
             (base32
              "07lc1z4k5dj9nrc1wvwmpvxr3xgxrdkdh53xb95skk5ij49yagfd"))))
@@ -1130,6 +1134,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/corba/")
                  (changeset "jdk6-b41")))
+           (file-name "corba-checkout")
            (sha256
             (base32
              "1p9g1r9dnax2iwp7yb59qx7m4nmshqhwmrb2b8jj8zgbd9dl2i3q"))))
@@ -1139,6 +1144,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/langtools/")
                  (changeset "jdk6-b41")))
+           (file-name "langtools-checkout")
            (sha256
             (base32
              "1x52wd67fynbbd9ild6fb4wvba3f5hhwk03qdjfazd0a1qr37z3d"))))
@@ -1148,6 +1154,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxp/")
                  (changeset "jdk6-b41")))
+           (file-name "jaxp-checkout")
            (sha256
             (base32
              "0shlqrvzpr4nrkmv215lbxnby63s3yvbdh1yxcayznsyqwa4nlxm"))))
@@ -1157,6 +1164,7 @@ machine.")))
            (uri (hg-reference
                  (url "http://hg.openjdk.java.net/jdk6/jdk6/jaxws/")
                  (changeset "jdk6-b41")))
+           (file-name "jaxws-checkout")
            (sha256
             (base32
              "0835lkw8vib1xhp8lxnybhlvzdh699hbi4mclxanydjk63zbpxk0"))))))
@@ -1279,6 +1287,25 @@ bootstrapping purposes.")
                               "openjdk.src/jdk/src/solaris/native/sun/nio/fs/LinuxNativeDispatcher.c")
                  (("attr/xattr.h") "sys/xattr.h"))
                #t))
+           (add-after 'unpack 'fix-openjdk
+             (lambda _
+               (substitute* "openjdk.src/jdk/make/common/Defs-linux.gmk"
+                 (("CFLAGS_COMMON   = -fno-strict-aliasing" all)
+                  (string-append all " -fcommon")))
+               (substitute*
+                   '("openjdk.src/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                     "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+                 (("#include <sys/sysctl.h>")
+                  "#include <linux/sysctl.h>"))
+               ;; It looks like the "h = 31 * h + c" line of the jsum()
+               ;; function gets miscompiled. After a few iterations of the loop
+               ;; the result of "31 * h" is always 0x8000000000000000.
+               ;; Bad optimization maybe...
+               ;; Transform "31 * h + c" into a convoluted "32 * h + c - h"
+               ;; as a workaround.
+               (substitute* "openjdk.src/hotspot/src/share/vm/memory/dump.cpp"
+                 (("h = 31 \\* h \\+ c;")
+                  "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;"))))
            (add-after 'unpack 'fix-x11-extension-include-path
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk"
@@ -1572,8 +1599,8 @@ bootstrapping purposes.")
            (add-after 'install 'install-keystore
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((keystore  "cacerts")
-                      (certs-dir (string-append (assoc-ref inputs "nss-certs")
-                                                "/etc/ssl/certs"))
+                      (certs-dir (search-input-directory inputs
+                                                         "etc/ssl/certs"))
                       (keytool   (string-append (assoc-ref outputs "jdk")
                                                 "/bin/keytool")))
                  (define (extract-cert file target)
@@ -1754,7 +1781,7 @@ IcedTea build harness.")
           (guix build syscalls)
           ,@%gnu-build-system-modules)
 
-         #:disallowed-references ((,icedtea-7 "jdk"))
+         #:disallowed-references ,(list (gexp-input icedtea-7 "jdk"))
 
          ,@(substitute-keyword-arguments (package-arguments icedtea-7)
              ((#:modules modules)
@@ -1767,7 +1794,9 @@ IcedTea build harness.")
                 (srfi srfi-26)))
              ((#:configure-flags flags)
               `(let ((jdk (assoc-ref %build-inputs "jdk")))
-                 `( ;;"--disable-bootstrap"
+                 `("CFLAGS=-fcommon"
+                   "CXXFLAGS=-fcommon"
+                   ;;"--disable-bootstrap"
                    "--enable-bootstrap"
                    "--enable-nss"
                    ,(string-append "--with-parallel-jobs="
@@ -1832,6 +1861,13 @@ new Date();"))
                         (find-files "openjdk.src/jdk/src/solaris/native"
                                     "\\.c|\\.h"))
                        #t)))
+                 (replace 'fix-openjdk
+                   (lambda _
+                     (substitute*
+                         '("openjdk.src/jdk/src/solaris/native/java/net/PlainSocketImpl.c"
+                           "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c")
+                       (("#include <sys/sysctl.h>")
+                        "#include <linux/sysctl.h>"))))
                  (replace 'install
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let ((doc (string-append (assoc-ref outputs "doc")
@@ -1910,7 +1946,8 @@ new Date();"))
        ((guix build syscalls)
         ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,icedtea-8 (,icedtea-8 "jdk"))
+       #:disallowed-references ,(list (gexp-input icedtea-8)
+                                      (gexp-input icedtea-8 "jdk"))
 
        #:phases
        (modify-phases %standard-phases
@@ -1925,7 +1962,12 @@ new Date();"))
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; TODO: unbundle libpng and lcms
              (invoke "bash" "./configure"
-                     (string-append "--with-freetype=" (assoc-ref inputs "freetype"))
+                     ;; Add flags for compilation with gcc >= 10
+                     ,(string-append "--with-extra-cflags=-fcommon"
+                                     " -fno-delete-null-pointer-checks"
+                                     " -fno-lifetime-dse")
+                     (string-append "--with-freetype="
+                                    (assoc-ref inputs "freetype"))
                      "--disable-freetype-bundling"
                      "--disable-warnings-as-errors"
                      "--disable-hotspot-gtest"
@@ -2099,17 +2141,28 @@ new Date();"))
            (replace 'configure
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (invoke "bash" "./configure"
-                       (string-append "--with-freetype=" (assoc-ref inputs "freetype"))
+                       ;; Add flags for compilation with gcc >= 10
+                       ,(string-append "--with-extra-cflags=-fcommon"
+                                       " -fno-delete-null-pointer-checks"
+                                       " -fno-lifetime-dse")
+                       (string-append "--with-freetype="
+                                      (assoc-ref inputs "freetype"))
                        "--disable-freetype-bundling"
                        "--disable-warnings-as-errors"
                        "--disable-hotspot-gtest"
                        "--with-giflib=system"
                        "--with-libjpeg=system"
                        "--with-native-debug-symbols=zipped"
-                       (string-append "--prefix=" (assoc-ref outputs "out")))
-               #t))))
+                       (string-append "--prefix=" (assoc-ref outputs "out")))))
+           (add-after 'unpack 'disable-warnings-as-errors
+             (lambda _
+               ;; It looks like the "--disable-warnings-as-errors" option of
+               ;; the 'configure' phase is not working.
+               (substitute* "make/autoconf/generated-configure.sh"
+                 (("-Werror") ""))))))
        ((#:disallowed-references _ '())
-        `(,openjdk9 (,openjdk9 "jdk")))))
+        `(,(gexp-input openjdk9)
+          ,(gexp-input openjdk9 "jdk")))))
     (native-inputs
      `(("openjdk9" ,openjdk9)
        ("openjdk9:jdk" ,openjdk9 "jdk")
@@ -2141,12 +2194,17 @@ new Date();"))
      `(#:imported-modules ((guix build syscalls)
                            ,@%gnu-build-system-modules)
 
-       #:disallowed-references (,openjdk10 (,openjdk10 "jdk"))
+       #:disallowed-references ,(list (gexp-input openjdk10)
+                                      (gexp-input openjdk10 "jdk"))
 
        #:tests? #f; requires jtreg
        ;; TODO package jtreg
        #:configure-flags
-       `("--disable-option-checking" ; --enable-fast-install default flag errors otherwise
+       `(;; Add flags for compilation with gcc >= 10
+         ,(string-append "--with-extra-cflags=-fcommon"
+                         " -fno-delete-null-pointer-checks"
+                         " -fno-lifetime-dse")
+         "--disable-option-checking" ; --enable-fast-install default flag errors otherwise
          "--disable-warnings-as-errors"
          ;; make validate-runpath pass, see: http://issues.guix.info/issue/32894
          "--with-native-debug-symbols=zipped"
@@ -2635,6 +2693,7 @@ new Date();"))
      (substitute-keyword-arguments (package-arguments ant-bootstrap)
        ((#:phases phases)
         `(modify-phases ,phases
+           (delete 'define-java-environment-variables)
            (add-after 'unpack 'remove-scripts
              ;; Remove bat / cmd scripts for DOS as well as the antRun and runant
              ;; wrappers.
@@ -2707,8 +2766,8 @@ new Date();"))
                  (delete-file-recursively lib)
                  #t)))))))
     (inputs
-     `(("java-commons-bcel" ,java-commons-bcel)
-       ,@(package-inputs ant/java8)))))
+     (modify-inputs (package-inputs ant/java8)
+       (prepend java-commons-bcel)))))
 
 (define-public ant-junit
   (package
@@ -2739,8 +2798,8 @@ new Date();"))
                  (delete-file-recursively lib)
                  #t)))))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ,@(package-inputs ant/java8)))))
+     (modify-inputs (package-inputs ant/java8)
+       (prepend java-junit)))))
 
 (define-public java-openjfx-build
   (package
@@ -2778,11 +2837,9 @@ new Date();"))
                      "buildSrc/src/main/java/com/sun/scenario/effect/compiler"
                      "buildSrc/src/main/antlr/JSL.g"))))))
     (inputs
-     `(("antlr3" ,antlr3)
-       ("java-stringtemplate" ,java-stringtemplate)))
+     (list antlr3 java-stringtemplate))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://openjfx.io")
     (synopsis "Graphical application toolkit in Java")
     (description "OpenJFX is a client application platform for desktop,
@@ -2818,7 +2875,7 @@ distribution.")
                (delete-file "com/sun/javafx/runtime/VersionInfoTest.java"))
              #t)))))
     (propagated-inputs
-     `(("java-openjfx-build" ,java-openjfx-build)))
+     (list java-openjfx-build))
     (description "OpenJFX is a client application platform for desktop,
 mobile and embedded systems built on Java.  Its goal is to produce a
 modern, efficient, and fully featured toolkit for developing rich client
@@ -2913,8 +2970,7 @@ distribution.")))
                                         (string-append target new-name))))
                          (find-files "netbeans" "\\.so$"))))))))
     (propagated-inputs
-     `(("java-openjfx-base" ,java-openjfx-base)
-       ("java-swt" ,java-swt)))
+     (list java-openjfx-base java-swt))
     ;; XXX: for unknown reasons
     ;; modules/graphics/src/main/native-prism-sw/JNativeSurface.c is missing
     ;; in this revision.
@@ -3072,9 +3128,9 @@ debugging, etc.")
                         #t))))
     (arguments
      `(#:make-flags                     ; bootstrap from javacc-4
-       (list (string-append "-Dbootstrap-jar="
-                            (assoc-ref %build-inputs "javacc")
-                            "/share/java/javacc.jar"))
+       ,#~(list (string-append "-Dbootstrap-jar="
+                               #$(this-package-native-input "javacc")
+                               "/share/java/javacc.jar"))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
@@ -3100,7 +3156,7 @@ debugging, etc.")
                #t))))))
 
     (native-inputs
-     `(("javacc" ,javacc-4)))))
+     (list javacc-4))))
 
 ;; This is the last 3.x release of ECJ
 (define-public java-ecj-3
@@ -3168,7 +3224,7 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
              #t))
          (replace 'install (install-jars ".")))))
     (native-inputs
-     `(("unzip" ,unzip)))))
+     (list unzip))))
 
 (define-public java-ecj
   (package (inherit java-ecj-3)
@@ -3251,19 +3307,22 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar"))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar"))
                  (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
-                  (string-append (assoc-ref inputs "java-commons-lang")
-                                 "/share/java/commons-lang-"
-                                 ,(package-version java-commons-lang) ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/share/java/commons-lang-"
+                                      ,(package-version java-commons-lang)
+                                      ".jar")))
                  (("\\$\\{lib\\}/commons-io/commons-io.jar")
-                  (string-append (assoc-ref inputs "java-commons-io")
-                                 "/lib/m2/commons-io/commons-io/"
-                                 ,(package-version java-commons-io)
-                                 "/commons-io-"
-                                 ,(package-version java-commons-io)
-                                 ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/lib/m2/commons-io/commons-io/"
+                                      ,(package-version java-commons-io)
+                                      "/commons-io-"
+                                      ,(package-version java-commons-io)
+                                      ".jar")))
                  ;; Remove dependency on svn
                  (("<build-info.*") "")
                  (("\\$\\{revision.number\\}")
@@ -3397,11 +3456,9 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
            (add-after 'unpack 'unpack-build-resources
              (lambda* (#:key inputs #:allow-other-keys)
                (mkdir-p "../build_resources")
-               (invoke "tar" "xf" (assoc-ref inputs "build-resources")
-                       "-C" "../build_resources"
-                       "--strip-components=1")
-               (mkdir-p "../build_resources/lib")
-               #t))
+               (copy-recursively (assoc-ref inputs "build-resources")
+                                 "../build_resources")
+               (mkdir-p "../build_resources/lib")))
            (add-after 'unpack-build-resources 'fix-dependencies
              (lambda* (#:key inputs #:allow-other-keys)
                ;; FIXME: There should be a more convenient abstraction for
@@ -3436,8 +3493,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
                  (rename-file "build-common.xml.new" "build-common.xml"))
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/cisd-base/cisd-base.jar")
-                  (string-append (assoc-ref inputs "java-cisd-base")
-                                 "/share/java/sis-base.jar"))
+                  (search-input-file inputs "/share/java/sis-base.jar"))
                  ;; Remove dependency on svn
                  (("<build-info.*") "")
                  (("\\$\\{revision.number\\}")
@@ -3449,7 +3505,7 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
                #t))
            (replace 'install (install-jars "targets/dist")))))
       (inputs
-       `(("java-cisd-base" ,java-cisd-base)))
+       (list java-cisd-base))
       (native-inputs
        `(("ecj" ,java-ecj-3.5)
          ("build-resources"
@@ -3539,29 +3595,32 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "../build_resources/ant/build-common.xml"
                  (("../libraries/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar")))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar")))
                (substitute* "build/build.xml"
                  (("\\$\\{lib\\}/sis-base/sis-base.jar")
-                  (string-append (assoc-ref inputs "java-cisd-base")
-                                 "/share/java/sis-base.jar"))
+                  (search-input-file inputs
+                                     "/share/java/sis-base.jar"))
                  (("\\$\\{lib\\}/cisd-args4j/cisd-args4j.jar")
-                  (string-append (assoc-ref inputs "java-cisd-args4j")
-                                 "/share/java/cisd-args4j.jar"))
+                  (search-input-file inputs
+                                     "/share/java/cisd-args4j.jar"))
                  (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
-                  (string-append (assoc-ref inputs "java-commons-lang")
-                                 "/share/java/commons-lang-"
-                                 ,(package-version java-commons-lang) ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/share/java/commons-lang-"
+                                      ,(package-version java-commons-lang)
+                                      ".jar")))
                  (("\\$\\{lib\\}/commons-io/commons-io.jar")
-                  (string-append (assoc-ref inputs "java-commons-io")
-                                 "/lib/m2/commons-io/commons-io/"
-                                 ,(package-version java-commons-io)
-                                 "/commons-io-"
-                                 ,(package-version java-commons-io)
-                                 ".jar"))
+                  (search-input-file inputs
+                                     (string-append
+                                      "/lib/m2/commons-io/commons-io/"
+                                      ,(package-version java-commons-io)
+                                      "/commons-io-"
+                                      ,(package-version java-commons-io)
+                                      ".jar")))
                  (("\\$\\{lib\\}/testng/testng-jdk15.jar")
-                  (string-append (assoc-ref inputs "java-testng")
-                                 "/share/java/java-testng.jar"))
+                  (search-input-file inputs
+                                     "/share/java/java-testng.jar"))
                  (("\\$\\{lib\\}/junit4/junit.jar")
                   (car (find-files (assoc-ref inputs "java-junit") "jar$")))
                  (("\\$\\{lib\\}/jmock/hamcrest/hamcrest-core.jar")
@@ -3618,12 +3677,12 @@ libraries from the SIS division at ETH Zurich like jHDF5.")
            (replace 'install
              (install-jars "targets/dist")))))
       (inputs
-       `(("java-cisd-base" ,java-cisd-base)
-         ("java-cisd-args4j" ,java-cisd-args4j)
-         ("java-commons-lang" ,java-commons-lang)
-         ("java-commons-io" ,java-commons-io)
-         ("hdf5" ,hdf5-1.8)
-         ("zlib" ,zlib)))
+       (list java-cisd-base
+             java-cisd-args4j
+             java-commons-lang
+             java-commons-io
+             hdf5-1.8
+             zlib))
       (native-inputs
        `(("jdk" ,icedtea-8)
          ("java-testng" ,java-testng)
@@ -3668,8 +3727,8 @@ HDF5 files, building on the libraries provided by the HDF Group.")
      `(#:tests? #f ; there is no test target
        #:build-target "compile"
        #:make-flags
-       (list "-Dbuild.compiler=javac1.8"
-             (string-append "-Ddist=" (assoc-ref %outputs "out")))
+       ,#~(list "-Dbuild.compiler=javac1.8"
+                (string-append "-Ddist=" #$output))
        #:phases
        (modify-phases %standard-phases
          (replace 'install
@@ -3720,7 +3779,7 @@ API and version 2.1 of the Java ServerPages API.")
                                "http/LocalStrings_fr.properties")))
                #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://javaee.github.io/servlet-spec/")
     (synopsis "Java servlet API")
     (description "Java Servlet is the foundation web specification in the
@@ -3800,8 +3859,7 @@ specification.")
        ("mesa" ,mesa)
        ("glu" ,glu)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("unzip" ,unzip)))
+     (list pkg-config unzip))
     (home-page "https://www.eclipse.org/swt/")
     (synopsis "Widget toolkit for Java")
     (description
@@ -3982,9 +4040,9 @@ documentation tools.")
                              target))
              #t)))))
     (inputs
-     `(("java-asm-bootstrap" ,java-asm-bootstrap)))
+     (list java-asm-bootstrap))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://code.google.com/archive/p/jarjar/")
     (synopsis "Repackage Java libraries")
     (description
@@ -4081,7 +4139,7 @@ private Method[] allMethods = getSortedMethods();")))
      `(("java-qdox-1.12" ,java-qdox-1.12)
        ("java-jarjar" ,java-jarjar)))
     (propagated-inputs
-     `(("java-hamcrest-parent-pom" ,java-hamcrest-parent-pom)))
+     (list java-hamcrest-parent-pom))
     (home-page "http://hamcrest.org/")
     (synopsis "Library of matchers for building test expressions")
     (description
@@ -4134,8 +4192,7 @@ testing frameworks, mocking libraries and UI validation rules.")
           (replace 'install
             (install-from-pom "pom/hamcrest-library.pom"))))))
     (propagated-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-hamcrest-parent-pom" ,java-hamcrest-parent-pom)))))
+     (list java-hamcrest-core java-hamcrest-parent-pom))))
 
 (define-public java-junit
   (package
@@ -4172,9 +4229,9 @@ testing frameworks, mocking libraries and UI validation rules.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-hamcrest-core))
     (native-inputs
-     `(("java-hamcrest-library" ,java-hamcrest-library)))
+     (list java-hamcrest-library))
     (home-page "https://junit.org/junit4/")
     (synopsis "Test framework for Java")
     (description
@@ -4203,11 +4260,9 @@ sharing common test data, and test runners for running tests.")
        #:test-dir "src/test"
        #:test-exclude (list "**/SuperclassTest.java")))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-assertj" ,java-assertj)))
+     (list java-junit java-hamcrest-core java-assertj))
     (home-page "https://github.com/Pragmatists/JUnitParams")
     (synopsis "Parameterised test support for JUnit")
     (description "The JUnitParams project adds a new runner to JUnit and
@@ -4268,10 +4323,9 @@ cli/shell/BourneShell.java"
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (propagated-inputs
-     `(("plexus-parent-pom" ,plexus-parent-pom-5.1)))
+     (list plexus-parent-pom-5.1))
     (home-page "https://codehaus-plexus.github.io/plexus-utils/")
     (synopsis "Common utilities for the Plexus framework")
     (description "This package provides various Java utility classes for the
@@ -4316,8 +4370,7 @@ more.")
     (propagated-inputs
      `(("plexus-parent-pom-5.1" ,plexus-parent-pom-5.1)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://codehaus-plexus.github.io/plexus-interpolation/")
     (synopsis "Java components for interpolating ${} strings and the like")
     (description "Plexus interpolator is a modular, flexible interpolation
@@ -4353,7 +4406,7 @@ these two libraries to vary independently of one another.")
     (propagated-inputs
      `(("plexus-parent-pom-5.1" ,plexus-parent-pom-5.1)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://codehaus-plexus.github.io/plexus-classworlds/")
     (synopsis "Java class loader framework")
     (description "Plexus classworlds replaces the native @code{ClassLoader}
@@ -4455,11 +4508,9 @@ implementation.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils-3.3.0)
-       ("java-commons-io" ,java-commons-io)
-       ("plexus-parent-pom" ,plexus-parent-pom-5.1)))
+     (list java-plexus-utils-3.3.0 java-commons-io plexus-parent-pom-5.1))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)
@@ -4513,11 +4564,8 @@ reusing it in maven.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils-3.3.0)
-       ("java-plexus-io" ,java-plexus-io)
-       ("java-iq80-snappy" ,java-iq80-snappy)
-       ("java-commons-compress" ,java-commons-compress)
-       ("plexus-parent-pom" ,plexus-parent-pom-6.1)))
+     (list java-plexus-utils-3.3.0 java-plexus-io java-iq80-snappy
+           java-commons-compress plexus-parent-pom-6.1))
     (inputs
      `(("java-jsr305" ,java-jsr305)
        ("java-plexus-container-default"
@@ -4599,7 +4647,7 @@ archives (jar).")
          (replace 'install
            (install-from-pom "plexus-component-annotations/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-containers-parent-pom" ,java-plexus-containers-parent-pom)))
+     (list java-plexus-containers-parent-pom))
     (inputs '())
     (native-inputs '())
     (synopsis "Plexus descriptors generator")
@@ -4641,9 +4689,7 @@ from source tags and class annotations.")))
        ("java-jdom2" ,java-jdom2)
        ("java-asm" ,java-asm)))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-guava" ,java-guava)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)))
+     (list java-junit java-guava java-geronimo-xbean-reflect))
     (synopsis "Inversion-of-control container for Maven")
     (description "The Plexus project provides a full software stack for creating
 and executing software projects.  Based on the Plexus container, the
@@ -4687,12 +4733,11 @@ provides the Maven plugin generating the component metadata.")))
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-cdi-api" ,java-cdi-api)
-       ("java-javax-inject" ,java-javax-inject)))
+     (list java-cdi-api java-javax-inject))
     (propagated-inputs
-     `(("java-sonatype-spice-parent-pom" ,java-sonatype-spice-parent-pom-15)))
+     (list java-sonatype-spice-parent-pom-15))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/sonatype/plexus-cipher")
     (synopsis "Encryption/decryption Component")
     (description "Plexus-cipher contains a component to deal with encryption
@@ -4740,15 +4785,12 @@ and decryption.")
          (replace 'install
            (install-from-pom "plexus-java/pom.xml")))))
     (propagated-inputs
-     `(("java-asm" ,java-asm)
-       ("java-qdox" ,java-qdox-2-M9)
-       ("java-javax-inject" ,java-javax-inject)
-       ("plexus-parent-pom" ,plexus-parent-pom-4.0)))
+     (list java-asm java-qdox-2-M9 java-javax-inject
+           plexus-parent-pom-4.0))
     (inputs
-     `(("java-plexus-component-annotations" ,java-plexus-component-annotations)))
+     (list java-plexus-component-annotations))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-junit" ,java-junit)))
+     (list java-plexus-component-metadata java-junit))
     (home-page "https://codehaus-plexus.github.io/plexus-languages/plexus-java")
     (synopsis "Shared language features for Java")
     (description "This package contains shared language features of the Java
@@ -4782,7 +4824,7 @@ language, for the plexus project.")
        ("java-plexus-compiler-pom" ,java-plexus-compiler-pom)
        ("java-plexus-util" ,java-plexus-utils)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus-plexus/plexus-compiler")
     (synopsis "Plexus Compilers component's API to manipulate compilers")
     (description "This package contains the API used by components to manipulate
@@ -4864,12 +4906,10 @@ compilers.")
          (replace 'install
            (install-from-pom "plexus-compiler-manager/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-pom" ,java-plexus-compiler-pom)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-compiler-api java-plexus-compiler-pom
+           java-plexus-container-default))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)))
+     (list unzip java-plexus-component-metadata))
     (synopsis "Compiler management for Plexus Compiler component")
     (description "Plexus Compiler is a Plexus component to use different
 compilers through a uniform API.  This component chooses the compiler
@@ -4913,9 +4953,8 @@ implementation to use in a project.")))
          (replace 'install
            (install-from-pom "plexus-compilers/plexus-compiler-javac/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-compiler-api java-plexus-utils
+           java-plexus-container-default))
     (synopsis "Javac Compiler support for Plexus Compiler component")
     (description "This package contains the Javac Compiler support for Plexus
 Compiler component.")))
@@ -4973,10 +5012,9 @@ packages.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("plexus-components-pom-1.1.20" ,plexus-components-pom-1.1.20)))
+     (list java-plexus-utils plexus-components-pom-1.1.20))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/codehaus-plexus/plexus-digest")
     (synopsis "Hash function utilities for Java")
     (description "This package is a plexus component that contains hash
@@ -5051,9 +5089,8 @@ function utilities.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-cipher" ,java-plexus-cipher)
-       ("java-sonatype-spice-parent-pom" ,java-sonatype-spice-parent-pom-12)))
+     (list java-plexus-utils java-plexus-cipher
+           java-sonatype-spice-parent-pom-12))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ;; for modello:
@@ -5096,13 +5133,10 @@ This component decrypts a string passed to it.")
        #:jdk ,icedtea-8
        #:test-dir "src/test"))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)))
+     (list java-commons-cli java-plexus-container-default
+           java-plexus-classworlds))
     (native-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-junit" ,java-junit)
-       ("java-guava" ,java-guava)))
+     (list java-plexus-utils java-junit java-guava))
     (home-page "https://codehaus-plexus.github.io/plexus-cli")
     (synopsis "CLI building library for plexus")
     (description "This package is a library to help creating CLI around
@@ -5159,8 +5193,7 @@ which behaves as if all files were just created.</description>\n
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-utils java-plexus-container-default))
     (home-page "https://github.com/sonatype/sisu-build-api/")
     (synopsis "Base build API for maven")
     (description "This package contains the base build API for maven and
@@ -5204,14 +5237,11 @@ project and determining what files need to be rebuilt.")
                  (("src/test") "modello-core/src/test")))
              #t)))))
     (propagated-inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-container-default" ,java-plexus-container-default)
-       ("java-sisu-build-api" ,java-sisu-build-api)))
+     (list java-plexus-utils java-plexus-container-default
+           java-sisu-build-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
-       ("java-guava" ,java-guava)))
+     (list java-junit java-plexus-classworlds java-geronimo-xbean-reflect
+           java-guava))
     (home-page "https://codehaus-plexus.github.io/modello/")
     (synopsis "Framework for code generation from a simple model")
     (description "Modello is a framework for code generation from a simple model.
@@ -5252,7 +5282,7 @@ XSD and documentation.")
                                "build/classes")
              #t)))))
     (inputs
-     `(("java-modello-core" ,java-modello-core)))
+     (list java-modello-core))
     (synopsis "Modello Java Plugin")
     (description "Modello Java Plugin generates Java objects for the model.")))
 
@@ -5282,8 +5312,7 @@ XSD and documentation.")
                  (("src/test") "modello-plugins/modello-plugin-xml/src/test")))
              #t)))))
     (propagated-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ("java-modello-plugins-java" ,java-modello-plugins-java)))
+     (list java-modello-core java-modello-plugins-java))
     (synopsis "Modello XML Plugin")
     (description "Modello XML Plugin contains shared code for every plugins
 working on XML representation of the model.")))
@@ -5298,10 +5327,8 @@ working on XML representation of the model.")))
        #:tests? #f; no tests
        #:jdk ,icedtea-8))
     (inputs
-     `(("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-compiler-api" ,java-plexus-compiler-api)
-       ("java-plexus-compiler-javac" ,java-plexus-compiler-javac)
-       ("java-plexus-container-default" ,java-plexus-container-default)))
+     (list java-plexus-utils java-plexus-compiler-api
+           java-plexus-compiler-javac java-plexus-container-default))
     (synopsis "Modello test package")
     (description "The modello test package contains the basis to create
 Modello generator unit-tests, including sample models and xml files to test
@@ -5327,13 +5354,11 @@ every feature for every plugin.")))
                                "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-modello-core" ,java-modello-core)
-       ("java-modello-plugins-java" ,java-modello-plugins-java)
-       ("java-modello-plugins-xml" ,java-modello-plugins-xml)))
+     (list java-modello-core java-modello-plugins-java
+           java-modello-plugins-xml))
     (native-inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-modello-test" ,java-modello-test)
-       ,@(package-native-inputs java-modello-core)))
+     (modify-inputs (package-native-inputs java-modello-core)
+       (prepend java-xmlunit java-modello-test)))
     (synopsis "Modello XPP3 Plugin")
     (description "The modello XPP3 plugin generates XML readers and writers based
 on the XPP3 API (XML Pull Parser).")))
@@ -5390,9 +5415,9 @@ on the XPP3 API (XML Pull Parser).")))
          (replace 'install
            (install-from-pom "archive/asm.pom")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (propagated-inputs
-     `(("java-org-ow2-parent-pom" ,java-org-ow2-parent-pom-1.3)))
+     (list java-org-ow2-parent-pom-1.3))
     (home-page "https://asm.ow2.io/")
     (synopsis "Very small and fast Java bytecode manipulation framework")
     (description "ASM is an all purpose Java bytecode manipulation and
@@ -5421,7 +5446,7 @@ complex transformations and code analysis tools.")
          (delete 'build)
          (delete 'configure)
          (replace 'install
-           (install-pom-file (assoc-ref %build-inputs "source"))))))
+           ,#~(install-pom-file #$source)))))
     (home-page "https://ow2.org")
     (synopsis "Ow2.org parent pom")
     (description "This package contains the parent pom for projects from ow2.org,
@@ -5472,7 +5497,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)))))
+     (list java-asm-8))))
 
 (define-public java-asm-analysis-8
   (package
@@ -5485,8 +5510,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)
-       ("java-asm-tree" ,java-asm-tree-8)))))
+     (list java-asm-8 java-asm-tree-8))))
 
 (define-public java-asm-util-8
   (package
@@ -5499,9 +5523,7 @@ including java-asm.")
        ;; tests depend on junit5
        #:tests? #f))
     (inputs
-     `(("java-asm" ,java-asm-8)
-       ("java-asm-analysis" ,java-asm-analysis-8)
-       ("java-asm-tree" ,java-asm-tree-8)))))
+     (list java-asm-8 java-asm-analysis-8 java-asm-tree-8))))
 
 (define-public java-cglib
   (package
@@ -5531,8 +5553,7 @@ including java-asm.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "cglib") #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-junit" ,java-junit)))
+     (list java-asm java-junit))
     (home-page "https://github.com/cglib/cglib/")
     (synopsis "Java byte code generation library")
     (description "The byte code generation library CGLIB is a high level API
@@ -5558,8 +5579,7 @@ to generate and transform Java byte code.")
        #:source-dir "main/src/"
        #:test-dir "main/src/test/"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "http://objenesis.org/")
     (synopsis "Bypass the constructor when creating an object")
     (description "Objenesis is a small Java library that serves one purpose:
@@ -5620,12 +5640,9 @@ constructor on object instantiation.")
                (delete-file "tests2/EasyMockPropertiesTest.java"))
              #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)
-       ("java-objenesis" ,java-objenesis)))
+     (list java-asm java-cglib java-objenesis))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://easymock.org/")
     (synopsis "Java library providing mock objects for unit tests")
     (description "EasyMock is a Java library that provides an easy way to use
@@ -5684,10 +5701,7 @@ The jMock library
                (base32
                 "12b7l22g3nrjvf2dzcw3z03fpd2chrgp0d8xkvn8w55rwb57pax6"))))
     (inputs
-     `(("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-asm" ,java-asm)
-       ("java-bsh" ,java-bsh)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-all java-asm java-bsh java-junit))
     (native-inputs
      `(("cglib" ,java-cglib)))
     (arguments
@@ -5728,15 +5742,15 @@ The jMock library
                           (string-append "jmock-legacy/src/test/java/" file))
                #t))))))
     (inputs
-     `(("java-hamcrest-all" ,java-hamcrest-all)
-       ("java-objenesis" ,java-objenesis)
-       ("java-cglib" ,java-cglib)
-       ("java-jmock" ,java-jmock)
-       ("java-asm" ,java-asm)
-       ("java-bsh" ,java-bsh)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-all
+           java-objenesis
+           java-cglib
+           java-jmock
+           java-asm
+           java-bsh
+           java-junit))
     (native-inputs
-     `(("java-jmock-junit4" ,java-jmock-junit4)))))
+     (list java-jmock-junit4))))
 
 (define-public java-hamcrest-all
   (package (inherit java-hamcrest-core)
@@ -5787,16 +5801,16 @@ The jMock library
                                          (not (string-suffix? "-sources.jar" name)))))))
                    #t)))))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-jmock" ,java-jmock-1)
-       ;; This is necessary because of what seems to be a race condition.
-       ;; This package would sometimes fail to build because hamcrest-core.jar
-       ;; could not be found, even though it is built as part of this package.
-       ;; Adding java-hamcrest-core appears to fix this problem.  See
-       ;; https://debbugs.gnu.org/31390 for more information.
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-easymock" ,java-easymock)
-       ,@(package-inputs java-hamcrest-core)))))
+     (modify-inputs (package-inputs java-hamcrest-core)
+       (prepend java-junit
+                java-jmock-1
+                ;; This is necessary because of what seems to be a race condition.
+                ;; This package would sometimes fail to build because hamcrest-core.jar
+                ;; could not be found, even though it is built as part of this package.
+                ;; Adding java-hamcrest-core appears to fix this problem.  See
+                ;; https://debbugs.gnu.org/31390 for more information.
+                java-hamcrest-core
+                java-easymock)))))
 
 (define-public java-jopt-simple
   (package
@@ -5870,12 +5884,12 @@ overly clever.")
      `(#:build-target "jar"
        #:test-target "test"
        #:make-flags
-       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
-             (junit    (assoc-ref %build-inputs "java-junit")))
-         (list (string-append "-Djunit.jar="
-                              (car (find-files junit "jar$")))
-               (string-append "-Dhamcrest.jar="
-                              (car (find-files hamcrest ".*.jar$")))))
+       ,#~(let ((hamcrest #$(this-package-native-input "java-hamcrest-core"))
+                (junit    #$(this-package-native-input "java-junit")))
+            (list (string-append "-Djunit.jar="
+                                 (car (find-files junit "jar$")))
+                  (string-append "-Dhamcrest.jar="
+                                 (car (find-files hamcrest ".*.jar$")))))
        #:phases
        (modify-phases %standard-phases
          ;; We want to build the jar in the build phase and run the tests
@@ -5884,14 +5898,12 @@ overly clever.")
            (lambda _
              (substitute* "build.xml"
                (("name=\"jar\" depends=\"test\"")
-                "name=\"jar\" depends=\"compile\""))
-             #t))
+                "name=\"jar\" depends=\"compile\""))))
          ;; There is no install target.
          (replace 'install
            (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/math/")
     (synopsis "Apache Commons mathematics library")
     (description "Commons Math is a library of lightweight, self-contained
@@ -5932,11 +5944,9 @@ available in the Java programming language or Commons Lang.")
              ;; respectively.
              (delete-file-recursively "jmh-archetypes"))))))
     (propagated-inputs
-     `(("java-jopt-simple" ,java-jopt-simple-4)
-       ("java-commons-math3" ,java-commons-math3)))
+     (list java-jopt-simple-4 java-commons-math3))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://openjdk.java.net/projects/code-tools/jmh/")
     (synopsis "Benchmark harness for the JVM")
     (description "JMH is a Java harness for building, running, and analysing
@@ -5960,23 +5970,21 @@ targeting the JVM.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
-             (junit    (assoc-ref %build-inputs "java-junit"))
-             (easymock (assoc-ref %build-inputs "java-easymock")))
-         (list (string-append "-Djunit.jar="
-                              (car (find-files junit "jar$")))
-               (string-append "-Dhamcrest.jar="
-                              (car (find-files hamcrest "jar$")))
-               (string-append "-Deasymock.jar=" easymock
-                              "/share/java/easymock.jar")))
+       ,#~(let ((hamcrest #$(this-package-native-input "java-hamcrest-core"))
+                (junit    #$(this-package-native-input "java-junit"))
+                (easymock #$(this-package-native-input "java-easymock")))
+            (list (string-append "-Djunit.jar="
+                                 (car (find-files junit "jar$")))
+                  (string-append "-Dhamcrest.jar="
+                                 (car (find-files hamcrest "jar$")))
+                  (string-append "-Deasymock.jar=" easymock
+                                 "/share/java/easymock.jar")))
        #:phases
        (modify-phases %standard-phases
          (replace 'install
            (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-easymock" ,java-easymock)))
+     (list java-junit java-hamcrest-core java-easymock))
     (home-page "https://commons.apache.org/collections/")
     (synopsis "Collections framework")
     (description "The Java Collections Framework is the recognised standard
@@ -6100,19 +6108,18 @@ setter and getter method.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Djunit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$"))))
+       ,#~(list (string-append "-Djunit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'build 'build-javadoc ant-build-javadoc)
          (replace 'install (install-from-pom "pom.xml"))
          (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (propagated-inputs
-     `(("apache-commons-parent-pom" ,apache-commons-parent-pom-39)))
+     (list apache-commons-parent-pom-39))
     (home-page "https://commons.apache.org/io/")
     (synopsis "Common useful IO related classes")
     (description "Commons-IO contains utility classes, stream implementations,
@@ -6135,9 +6142,9 @@ file filters and endian classes.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Dmaven.junit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$"))))
+       ,#~(list (string-append "-Dmaven.junit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$"))))
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'delete-network-tests
@@ -6150,7 +6157,7 @@ file filters and endian classes.")
          (delete 'check)
          (replace 'install (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/proper/commons-exec/")
     (synopsis "Common program execution related classes")
     (description "Commons-Exec simplifies executing external processes.")
@@ -6171,11 +6178,11 @@ file filters and endian classes.")
     (arguments
      `(#:test-target "test"
        #:make-flags
-       (list (string-append "-Dmaven.junit.jar="
-                            (car (find-files (assoc-ref %build-inputs "java-junit")
-                                             "jar$")))
-             "-Dmaven.compiler.source=1.7"
-             "-Dmaven.compiler.target=1.7")
+       ,#~(list (string-append "-Dmaven.junit.jar="
+                               (car (find-files #$(this-package-native-input "java-junit")
+                                                "jar$")))
+                "-Dmaven.compiler.source=1.7"
+                "-Dmaven.compiler.target=1.7")
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'delete-network-tests
@@ -6195,8 +6202,7 @@ file filters and endian classes.")
          (delete 'check)
          (replace 'install (install-jars "target")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-commons-lang
   (package
@@ -6228,7 +6234,7 @@ time/FastDateFormatTest.java"
          (replace 'install (install-jars "target"))
          (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/lang/")
     (synopsis "Extension of the java.lang package")
     (description "The Commons Lang components contains a set of Java classes
@@ -6274,7 +6280,7 @@ included:
        (modify-phases %standard-phases
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("apache-commons-parent-pom" ,apache-commons-parent-pom-48)))
+     (list apache-commons-parent-pom-48))
     (home-page "https://commons.apache.org/lang/")
     (synopsis "Extension of the java.lang package")
     (description "The Commons Lang components contains a set of Java classes
@@ -6344,9 +6350,9 @@ in the @code{java.lang} package.  The following classes are included:
              #t))
          (replace 'install (install-jars "build")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-logging-minimal))
     (home-page "https://commons.apache.org/proper/commons-bsf")
     (synopsis "Bean Scripting Framework")
     (description "The Bean Scripting Framework (BSF) is a set of Java classes
@@ -6382,7 +6388,7 @@ these scripting language engines.")
        ("java-jdom" ,java-jdom)
        ("java-commons-beanutils" ,java-commons-beanutils)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/jxpath/")
     (synopsis "Simple interpreter of an expression language called XPath.")
     (description "The org.apache.commons.jxpath package defines a simple
@@ -6409,12 +6415,9 @@ contexts, DOM etc, including mixtures thereof.")
        (list "**/PerformanceTest.java")))
     (build-system ant-build-system)
     (inputs
-     `(("java-cglib" ,java-cglib)))
+     (list java-cglib))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-asm" ,java-asm)
-       ("java-objenesis" ,java-objenesis)))
+     (list java-junit java-hamcrest-core java-asm java-objenesis))
     (home-page "https://commons.apache.org/proper/commons-pool/")
     (synopsis "Object-pooling API in Java")
     (description "The commons-pool package provides an object-pooling API
@@ -6443,7 +6446,7 @@ creating new pool implementations.")
        ("java-commons-logging" ,java-commons-logging-minimal)
        ("java-jboss-transaction-api-spec" ,java-jboss-transaction-api-spec)))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (build-system ant-build-system)
     (home-page "https://commons.apache.org/proper/commons-dbcp/")
     (synopsis "Database Connection Pool for Java")
@@ -6485,12 +6488,10 @@ reduce that load.")
                (delete-file "admin/servlet/JCSAdminServlet.java"))
              #t)))))
     (propagated-inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-dbcp" ,java-commons-dbcp)))
+     (list java-classpathx-servletapi java-commons-logging-minimal
+           java-commons-httpclient java-commons-dbcp))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/proper/commons-jcs/")
     (synopsis "Distributed caching system in Java")
     (description "JCS is a distributed caching system written in Java.  It
@@ -6608,9 +6609,9 @@ It provides packages in the @code{javax.annotations} namespace.")
              #t))
          (replace 'install (install-from-pom "guava/pom.xml")))))
     (inputs
-     `(("java-jsr305" ,java-jsr305)))
+     (list java-jsr305))
     (propagated-inputs
-     `(("java-guava-parent-pom" ,java-guava-parent-pom)))
+     (list java-guava-parent-pom))
     (home-page "https://github.com/google/guava")
     (synopsis "Google core libraries for Java")
     (description "Guava is a set of core libraries that includes new
@@ -6733,10 +6734,7 @@ used with any logging implementation at runtime.")
                  (("import org.mockito.cglib") "import net.sf.cglib")))
              #t)))))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-objenesis" ,java-objenesis)
-       ("java-cglib" ,java-cglib)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-objenesis java-cglib java-hamcrest-core))
     (home-page "http://mockito.org")
     (synopsis "Mockito is a mock library for Java")
     (description "Mockito is a mocking library for Java which lets you write
@@ -6764,11 +6762,9 @@ it records all mock invocations, including methods arguments.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore") #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-lang3" ,java-commons-lang3)))
+     (list java-commons-logging-minimal java-commons-lang3))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-mockito" ,java-mockito-1)))
+     (list java-junit java-mockito-1))
     (home-page "https://hc.apache.org/httpcomponents-core-4.4.x/index.html")
     (synopsis "Low level HTTP transport components")
     (description "HttpCore is a set of low level HTTP transport components
@@ -6790,9 +6786,8 @@ This package provides the blocking I/O model library.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore-nio") #t)))))
     (inputs
-     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ,@(package-inputs java-httpcomponents-httpcore)))
+     (modify-inputs (package-inputs java-httpcomponents-httpcore)
+       (prepend java-httpcomponents-httpcore java-hamcrest-core)))
     (description "HttpCore is a set of low level HTTP transport components
 that can be used to build custom client and server side HTTP services with a
 minimal footprint.  HttpCore supports two I/O models: blocking I/O model based
@@ -6812,10 +6807,9 @@ NIO.")))
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpcore-ab") #t)))))
     (inputs
-     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ,@(package-inputs java-httpcomponents-httpcore)))
+     (modify-inputs (package-inputs java-httpcomponents-httpcore)
+       (prepend java-httpcomponents-httpcore java-commons-cli
+                java-hamcrest-core)))
     (synopsis "Apache HttpCore benchmarking tool")
     (description "This package provides the HttpCore benchmarking tool.  It is
 an Apache AB clone based on HttpCore.")))
@@ -6840,12 +6834,12 @@ an Apache AB clone based on HttpCore.")))
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpclient") #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-codec" ,java-commons-codec)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-mockito" ,java-mockito-1)
-       ("java-junit" ,java-junit)))
+     (list java-commons-logging-minimal
+           java-commons-codec
+           java-hamcrest-core
+           java-httpcomponents-httpcore
+           java-mockito-1
+           java-junit))
     (home-page "https://hc.apache.org/httpcomponents-client-ga/")
     (synopsis "HTTP client library for Java")
     (description "Although the @code{java.net} package provides basic
@@ -6866,10 +6860,8 @@ standards and recommendations.")
          (add-after 'unpack 'chdir
            (lambda _ (chdir "httpmime") #t)))))
     (inputs
-     `(("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
-       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-httpcomponents-httpclient java-httpcomponents-httpcore
+           java-junit java-hamcrest-core))))
 
 (define-public java-commons-net
   (package
@@ -6890,8 +6882,7 @@ standards and recommendations.")
        #:tests? #f
        #:jar-name "commons-net.jar"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/net/")
     (synopsis "Client library for many basic Internet protocols")
     (description "The Apache Commons Net library implements the client side of
@@ -6918,7 +6909,7 @@ fundamental protocol access, not higher-level abstractions.")
        (modify-phases %standard-phases
          (replace 'install (install-jars "dist")))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "http://www.jcraft.com/jsch/")
     (synopsis "Pure Java implementation of SSH2")
     (description "JSch is a pure Java implementation of SSH2.  JSch allows you
@@ -6961,11 +6952,9 @@ programs.")
              #t))
          (replace 'install (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-xz" ,java-xz)
-       ("apache-commons-parent-pom" ,apache-commons-parent-pom-41)))
+     (list java-xz apache-commons-parent-pom-41))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-mockito" ,java-mockito-1)))
+     (list java-junit java-mockito-1))
     (home-page "https://commons.apache.org/proper/commons-compress/")
     (synopsis "Java library for working with compressed files")
     (description "The Apache Commons Compress library defines an API for
@@ -7054,7 +7043,7 @@ components.")
      `(#:tests? #f ; no tests
        #:jar-name "osgi-core.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)))
+     (list java-osgi-annotation))
     (home-page "https://www.osgi.org")
     (synopsis "Core module of OSGi framework")
     (description
@@ -7081,8 +7070,7 @@ the OSGi Core module.")
      `(#:tests? #f ; no tests
        #:jar-name "osgi-service-event.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)
-       ("java-osgi-core" ,java-osgi-core)))
+     (list java-osgi-annotation java-osgi-core))
     (home-page "https://www.osgi.org")
     (synopsis "OSGi service event module")
     (description
@@ -7109,7 +7097,7 @@ the OSGi @code{org.osgi.service.event} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-osgi.jar"))
     (inputs
-     `(("java-osgi-annotation" ,java-osgi-annotation)))
+     (list java-osgi-annotation))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse Equinox OSGi framework")
     (description "This package provides an implementation of the OSGi Core
@@ -7134,7 +7122,7 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-common.jar"))
     (inputs
-     `(("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Common Eclipse runtime")
     (description "This package provides the common Eclipse runtime.")
@@ -7158,8 +7146,7 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-jobs.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse jobs mechanism")
     (description "This package provides the Eclipse jobs mechanism.")
@@ -7183,9 +7170,8 @@ specification.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-registry.jar"))
     (inputs
-     `(("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-core-jobs java-eclipse-equinox-common
+           java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse extension registry support")
     (description "This package provides support for the Eclipse extension
@@ -7210,10 +7196,8 @@ registry.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-app.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-osgi-service-event" ,java-osgi-service-event)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi java-osgi-service-event))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Equinox application container")
     (description "This package provides the Equinox application container for
@@ -7238,9 +7222,8 @@ Eclipse.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-equinox-preferences.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi))
     (home-page "http://www.eclipse.org/equinox/")
     (synopsis "Eclipse preferences mechanism")
     (description "This package provides the Eclipse preferences mechanism with
@@ -7265,10 +7248,8 @@ the module @code{org.eclipse.equinox.preferences}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-contenttype.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry java-eclipse-osgi))
     (home-page "http://www.eclipse.org/")
     (synopsis "Eclipse content mechanism")
     (description "This package provides the Eclipse content mechanism in the
@@ -7293,13 +7274,13 @@ the module @code{org.eclipse.equinox.preferences}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-runtime.jar"))
     (inputs
-     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-core-contenttype
+           java-eclipse-core-jobs
+           java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core runtime")
     (description "This package provides the Eclipse core runtime with the
@@ -7324,9 +7305,8 @@ module @code{org.eclipse.core.runtime}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-filesystem.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core file system")
     (description "This package provides the Eclipse core file system with the
@@ -7351,11 +7331,9 @@ module @code{org.eclipse.core.filesystem}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-expressions.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences java-eclipse-core-runtime
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core expression language")
     (description "This package provides the Eclipse core expression language
@@ -7380,11 +7358,9 @@ with the @code{org.eclipse.core.expressions} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-variables.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences java-eclipse-core-runtime
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse core variables")
     (description "This package provides the Eclipse core variables module
@@ -7409,14 +7385,14 @@ with the @code{org.eclipse.core.expressions} module.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-ant-core.jar"))
     (inputs
-     `(("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-core-variables" ,java-eclipse-core-variables)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-core-contenttype
+           java-eclipse-core-runtime
+           java-eclipse-core-variables
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Ant build tool core libraries")
     (description "This package provides the ant build tool core libraries with
@@ -7441,16 +7417,16 @@ the module @code{org.eclipse.ant.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-resources.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-expressions" ,java-eclipse-core-expressions)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-ant-core" ,java-eclipse-ant-core)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-equinox-common
+           java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry
+           java-eclipse-core-contenttype
+           java-eclipse-core-expressions
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-runtime
+           java-eclipse-ant-core
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core resource management")
     (description "This package provides the Eclipse core resource management
@@ -7475,10 +7451,8 @@ module @code{org.eclipse.core.resources}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-compare-core.jar"))
     (inputs
-     `(("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-icu4j" ,java-icu4j)))
+     (list java-eclipse-core-runtime java-eclipse-equinox-common
+           java-eclipse-osgi java-icu4j))
     (home-page "https://www.eclipse.org/")
     (synopsis "Eclipse core compare support")
     (description "This package provides the Eclipse core compare support
@@ -7503,16 +7477,16 @@ module @code{org.eclipse.compare.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-team-core.jar"))
     (inputs
-     `(("java-eclipse-compare-core" ,java-eclipse-compare-core)
-       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+     (list java-eclipse-compare-core
+           java-eclipse-core-contenttype
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-resources
+           java-eclipse-core-runtime
+           java-eclipse-equinox-common
+           java-eclipse-equinox-registry
+           java-eclipse-equinox-preferences
+           java-eclipse-osgi))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse team support core")
     (description "This package provides the Eclipse team support core module
@@ -7537,7 +7511,7 @@ module @code{org.eclipse.compare.core}.")
      `(#:tests? #f ; no tests included
        #:jar-name "eclipse-core-commands.jar"))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)))
+     (list java-eclipse-equinox-common))
     (home-page "https://www.eclipse.org/platform")
     (synopsis "Eclipse core commands")
     (description "This package provides Eclipse core commands in the module
@@ -7589,9 +7563,8 @@ module @code{org.eclipse.compare.core}.")
                 "Positions.put(category, new ArrayList<Position>());"))
              #t)))))
     (inputs
-     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-core-commands" ,java-eclipse-core-commands)
-       ("java-icu4j" ,java-icu4j)))
+     (list java-eclipse-equinox-common java-eclipse-core-commands
+           java-icu4j))
     (home-page "http://www.eclipse.org/platform")
     (synopsis "Eclipse text library")
     (description "Platform Text is part of the Platform UI project and
@@ -7634,17 +7607,17 @@ and contributes the Eclipse default text editor.")
                          (find-files "." ".*.(props|properties|rsc)")))
              #t)))))
     (inputs
-     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
-       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
-       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
-       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
-       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
-       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
-       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
-       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
-       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
-       ("java-eclipse-osgi" ,java-eclipse-osgi)
-       ("java-eclipse-text" ,java-eclipse-text)))
+     (list java-eclipse-core-contenttype
+           java-eclipse-core-filesystem
+           java-eclipse-core-jobs
+           java-eclipse-core-resources
+           java-eclipse-core-runtime
+           java-eclipse-equinox-app
+           java-eclipse-equinox-common
+           java-eclipse-equinox-preferences
+           java-eclipse-equinox-registry
+           java-eclipse-osgi
+           java-eclipse-text))
     (home-page "https://www.eclipse.org/jdt")
     (synopsis "Java development tools core libraries")
     (description "This package provides the core libraries of the Eclipse Java
@@ -7670,7 +7643,7 @@ development tools.")
        #:jar-name "eclipse-jdt-compiler-apt.jar"
        #:jdk ,openjdk11))
     (inputs
-     `(("java-eclipse-jdt-core" ,java-eclipse-jdt-core)))
+     (list java-eclipse-jdt-core))
     (home-page "https://www.eclipse.org/jdt/apt/")
     (synopsis "Annotation processing tool")
     (description "APT stands for Annotation Processing Tool.  APT provides a
@@ -7716,7 +7689,7 @@ definition intended to be inherited by other packages.")
              (copy-recursively "org.eclipse.lsp4j.debug/src/main/xtend-gen"
                                "org.eclipse.lsp4j.debug/src/main/java"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
      `(("java-gson" ,java-gson-2.8.6)
        ("java-eclipse-lsp4j-generaor" ,java-eclipse-lsp4j-generator)
@@ -7738,7 +7711,7 @@ LSP4J Java bindings for the Debug Server Protocol.")))
        #:tests? #f; no tests
        #:source-dir "org.eclipse.lsp4j.generator/src/main/java"))
     (inputs
-     `(("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)))
+     (list java-eclipse-lsp4j-jsonrpc))
     (synopsis "Eclipse LSP4J Generator")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7754,9 +7727,9 @@ LSP4J code generator for Language Server Protocol classes.")))
        #:source-dir "org.eclipse.lsp4j.jsonrpc/src/main/java"
        #:test-dir "org.eclipse.lsp4j.jsonrpc/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-gson" ,java-gson-2.8.6)))
+     (list java-gson-2.8.6))
     (synopsis "Java JSON-RPC implementation")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7772,10 +7745,9 @@ JSON-RPC implementation.")))
        #:source-dir "org.eclipse.lsp4j.jsonrpc.debug/src/main/java"
        #:test-dir "org.eclipse.lsp4j.jsonrpc.debug/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)
-       ("java-gson" ,java-gson-2.8.6)))
+     (list java-eclipse-lsp4j-jsonrpc java-gson-2.8.6))
     (synopsis "Java JSON-RPC implementation (debug protocol)")
     (description "Eclipse LSP4J provides Java bindings for the Language
 Server Protocol and the Debug Adapter Protocol.  This package contains its
@@ -7802,9 +7774,9 @@ JSON-RPC implementation's debug protocol.")))
        #:source-dir "org.eclipse.xtext.xbase.lib/src"
        #:test-dir "org.eclipse.xtext.xbase.lib.tests/src"))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (inputs
-     `(("java-guava" ,java-guava)))
+     (list java-guava))
     (home-page "https://www.eclipse.org/Xtext/")
     (synopsis "Eclipse Xbase Runtime Library")
     (description "This package contains runtime libraries for Xbase languages
@@ -7853,8 +7825,7 @@ JavaMail API.")
      `(#:tests? #f ; tests require unpackaged software
        #:jar-name "log4j-api.jar"
        #:make-flags
-       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
-                            "/share/java"))
+       ,#~(list (string-append "-Ddist.dir=" #$output "/share/java"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -7866,9 +7837,7 @@ JavaMail API.")
          (add-after 'enter-dir 'delete-tests
            (lambda _ (delete-file-recursively "src/test") #t)))))
     (inputs
-     `(("java-osgi-core" ,java-osgi-core)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-osgi-core java-hamcrest-core java-junit))
     (properties '((cpe-name . "log4j")))
     (home-page "https://logging.apache.org/log4j/2.x/")
     (synopsis "API module of the Log4j logging framework for Java")
@@ -7915,8 +7884,7 @@ Java.")
        #:jar-name "log4j-core.jar"
        #:jdk ,icedtea-8
        #:make-flags
-       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
-                            "/share/java"))
+       ,#~(list (string-append "-Ddist.dir=" #$output "/share/java"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-dir
@@ -7964,8 +7932,7 @@ logging framework for Java.")))
          (replace 'install
            (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://commons.apache.org/cli/")
     (synopsis "Command line arguments and options parsing library")
     (description "The Apache Commons CLI library provides an API for parsing
@@ -8022,10 +7989,9 @@ This is a part of the Apache Commons Project.")
                 "return;"))))
          (replace 'install (install-from-pom "pom.xml")))))
     (native-inputs
-     `(("java-commons-lang3" ,java-commons-lang3)
-       ("java-junit" ,java-junit)))
+     (list java-commons-lang3 java-junit))
     (propagated-inputs
-      `(("apache-commons-parent-pom" ,apache-commons-parent-pom-50)))
+      (list apache-commons-parent-pom-50))
     (home-page "https://commons.apache.org/codec/")
     (synopsis "Common encoders and decoders such as Base64, Hex, Phonetic and URLs")
     (description "The codec package contains simple encoder and decoders for
@@ -8056,7 +8022,7 @@ This is a part of the Apache Commons Project.")
          (replace 'install (install-jars "dist"))
          (add-after 'install 'install-doc (install-javadoc "dist/docs/api")))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://commons.apache.org/daemon/")
     (synopsis "Library to launch Java applications as daemons")
     (description "The Daemon package from Apache Commons can be used to
@@ -8086,8 +8052,7 @@ This is a part of the Apache Commons Project.")
     (build-system ant-build-system)
     (arguments `(#:jar-name "javaewah.jar"))
     (inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://github.com/lemire/javaewah")
     (synopsis "Compressed alternative to the Java @code{BitSet} class")
     (description "This is a word-aligned compressed variant of the Java
@@ -8145,10 +8110,9 @@ more efficient storage-wise than an uncompressed bitmap (as implemented in the
          (replace 'install
            (install-from-pom "slf4j-api/pom.xml")))))
     (propagated-inputs
-     `(("java-slf4j-parent" ,java-slf4j-parent)))
+     (list java-slf4j-parent))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.slf4j.org/")
     (synopsis "Simple logging facade for Java")
     (description "The Simple Logging Facade for Java (SLF4J) serves as a
@@ -8198,10 +8162,9 @@ time.")
          (replace 'install
            (install-from-pom "slf4j-simple/pom.xml")))))
     (propagated-inputs
-     `(("java-slf4j-api" ,java-slf4j-api)))
+     (list java-slf4j-api))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.slf4j.org/")
     (synopsis "Simple implementation of simple logging facade for Java")
     (description "SLF4J binding for the Simple implementation, which outputs
@@ -8695,9 +8658,9 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
        #:source-dir "org.abego.treelayout/src/main/java"
        #:test-dir "org.abego.treelayout/src/test"))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-hamcrest-core))
     (home-page "http://treelayout.sourceforge.net")
     (synopsis "Tree Layout Algorithm in Java")
     (description "TreeLayout creates tree layouts for arbitrary trees.  It is
@@ -8887,14 +8850,14 @@ sources by ANTLR.")
                (invoke "antlr3" "SourceGenTriggers.g"))
              #t)))))
     (inputs
-     `(("antlr3" ,antlr3)
-       ("java-antlr4-runtime" ,java-antlr4-runtime)
-       ("java-icu4j" ,java-icu4j)
-       ("java-jsonp-api" ,java-jsonp-api)
-       ("java-stringtemplate" ,java-stringtemplate)
-       ("java-treelayout" ,java-treelayout)))
+     (list antlr3
+           java-antlr4-runtime
+           java-icu4j
+           java-jsonp-api
+           java-stringtemplate
+           java-treelayout))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (synopsis "Parser and lexer generator in Java")
     (description "ANTLR (ANother Tool for Language Recognition) is a powerful
 parser generator for reading, processing, executing, or translating structured
@@ -8924,7 +8887,7 @@ parse trees.")))
                (chmod "build.xml" #o644)
                #t))))))
     (inputs
-     `(("java-treelayout" ,java-treelayout)))))
+     (list java-treelayout))))
 
 (define-public antlr4-4.1
   (package
@@ -9103,7 +9066,7 @@ the runtime library of ANTLR.")))
                 "dir=\"${test.home}\""))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))))
+     (list java-junit))))
 
 (define-public java-microemulator-cldc
   (package
@@ -9516,7 +9479,7 @@ and service platform for the Java programming language.")
      `(#:jar-name "osgi-service-log.jar"
        #:tests? #f)); no tests
     (inputs
-     `(("java-osgi-framework" ,java-osgi-framework)))
+     (list java-osgi-framework))
     (home-page "https://www.osgi.org")
     (synopsis "Provides methods for bundles to write messages to the log")
     (description
@@ -10167,8 +10130,7 @@ Processor.  It also includes the default implementation of handler types
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core))
     (home-page "https://github.com/FasterXML/jackson-databind")
     (synopsis "Data-binding functionality and tree-model for the Jackson Data Processor")
     (description "This package contains the general-purpose data-binding
@@ -10216,11 +10178,10 @@ configuration.")
              (copy-recursively "jaxb/src/main/resources" "build/classes")
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core
+           java-fasterxml-jackson-databind))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/FasterXML/jackson-modules-base")
     (synopsis "Jaxb annotations jackson module")
     (description "This package is the jaxb annotations module for jackson.")
@@ -10261,13 +10222,10 @@ configuration.")
                  (("@projectartifactid@") "jackson-module-mrbean")))
              #t)))))
     (inputs
-     `(("java-asm" ,java-asm)
-       ("java-fasterxml-jackson-annotations"
-        ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)))
+     (list java-asm java-fasterxml-jackson-annotations
+           java-fasterxml-jackson-core java-fasterxml-jackson-databind))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/FasterXML/jackson-modules-base")
     (synopsis "POJO type materialization for Java")
     (description "This package implements POJO type materialization.
@@ -10331,10 +10289,8 @@ of deserialization.")
                  (("@projectartifactid@") "jackson-dataformat-yaml")))
              #t)))))
     (inputs
-     `(("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
-       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
-       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
-       ("java-snakeyaml" ,java-snakeyaml)))
+     (list java-fasterxml-jackson-annotations java-fasterxml-jackson-core
+           java-fasterxml-jackson-databind java-snakeyaml))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)
@@ -10563,9 +10519,9 @@ the subsequent value resolution at any given level.")
              #t))
          (replace 'install (install-jars "dist")))))
     (inputs
-     `(("java-asm" ,java-asm)))
+     (list java-asm))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/nhatminhle/cofoja")
     (synopsis "Contracts for Java")
     (description "Contracts for Java, or Cofoja for short, is a contract
@@ -10678,12 +10634,12 @@ the dependency is said to be unsatisfied, and the application is broken.")
          (replace 'install
            (install-from-pom "core/pom.xml")))))
     (propagated-inputs
-     `(("java-aopalliance" ,java-aopalliance)
-       ("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)
-       ("java-guava" ,java-guava)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice-parent-pom" ,java-guice-parent-pom)))
+     (list java-aopalliance
+           java-asm
+           java-cglib
+           java-guava
+           java-javax-inject
+           java-guice-parent-pom))
     (home-page "https://github.com/google/guice")
     (synopsis "Lightweight dependency injection framework")
     (description "Guice is a lightweight dependency injection framework for
@@ -10892,11 +10848,9 @@ annotations.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-commons-bsf" ,java-commons-bsf)))
+     (list java-classpathx-servletapi java-commons-bsf))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("javacc" ,javacc-3)))
+     (list java-junit javacc-3))
     (home-page "http://beanshell.org/")
     (synopsis "Lightweight Scripting for Java")
     (description "BeanShell is a small, free, embeddable Java source
@@ -10981,15 +10935,15 @@ those in Perl and JavaScript.")
          "**/MessageFormatter_format_Test.java"
          "**/internal/*/*_assert*_Test.java")))
     (inputs
-     `(("java-fest-util" ,java-fest-util)))
+     (list java-fest-util))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-fest-test" ,java-fest-test)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-mockito" ,java-mockito-1)
-       ("java-cglib" ,java-cglib)
-       ("java-objenesis" ,java-objenesis)
-       ("java-asm" ,java-asm)))
+     (list java-junit
+           java-fest-test
+           java-hamcrest-core
+           java-mockito-1
+           java-cglib
+           java-objenesis
+           java-asm))
     (home-page "https://github.com/alexruiz/fest-assert-2.x")
     (synopsis "FEST fluent assertions")
     (description "FEST-Assert provides a fluent interface for assertions.")
@@ -11113,9 +11067,7 @@ to use.")
                        "org.testng.TestNG" "-testclass"
                        "build/test-classes/com/neilalexander/jnacl/NaClTest.class"))))))
       (native-inputs
-       `(("java-testng" ,java-testng)
-         ("java-fest-util" ,java-fest-util)
-         ("java-fest-assert" ,java-fest-assert)))
+       (list java-testng java-fest-util java-fest-assert))
       (home-page "https://github.com/neilalexander/jnacl")
       (synopsis "Java implementation of NaCl")
       (description "Pure Java implementation of the NaCl: Networking and
@@ -11219,11 +11171,9 @@ configuration and string construction.")
                (invoke "java" "javacc" "Parser.jj"))
              #t)))))
     (inputs
-     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+     (list java-commons-logging-minimal))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("javacc" ,javacc-4)))
+     (list java-junit java-hamcrest-core javacc-4))
     (home-page "https://commons.apache.org/proper/commons-jexl/")
     (synopsis "Java Expression Language ")
     (description "JEXL is a library intended to facilitate the implementation
@@ -11309,7 +11259,7 @@ algorithms and xxHash hashing algorithm.")
          (replace 'install
            (install-jars "build/artifacts/jdk1.5/jars")))))
     (inputs
-     `(("java-javax-mail" ,java-javax-mail)))
+     (list java-javax-mail))
     (native-inputs
      `(("unzip" ,unzip)
        ("junit" ,java-junit)
@@ -11383,7 +11333,7 @@ message queues or resource locking.")
            (lambda _
              (delete-file "src/main/java/module-info.java"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/conversant/disruptor")
     (synopsis "High performance intra-thread communication")
     (description "Conversant Disruptor is the highest performing intra-thread
@@ -11411,8 +11361,7 @@ particularly simple design.")
        #:source-dir "jctools-core/src/main/java"
        #:test-dir "jctools-core/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-all" ,java-hamcrest-all)))
+     (list java-junit java-hamcrest-all))
     (home-page "https://github.com/JCTools/JCTools")
     (synopsis "Concurrency tools for Java")
     (description "This library implements concurrent data structures that are
@@ -11510,7 +11459,7 @@ streams, etc.")
        #:source-dir "powermock-reflect/src/main/java"
        #:test-dir "powermock-reflect/src/test"))
     (inputs
-     `(("java-objenesis" ,java-objenesis)))
+     (list java-objenesis))
     (native-inputs
      `(("junit" ,java-junit)
        ("cglib" ,java-cglib)
@@ -11754,7 +11703,7 @@ protocol-independent framework to build mail and messaging applications.")
          "**/RouterSpecTest.java"
          "**/ProxyTest.java")))
     (inputs
-     `(("java-jnacl" ,java-jnacl)))
+     (list java-jnacl))
     (native-inputs
      `(("java-hamcrest-core" ,java-hamcrest-core)
        ("junit" ,java-junit)))
@@ -11792,8 +11741,7 @@ protocol-independent framework to build mail and messaging applications.")
          ;; Undeterministic failure, seems to affect mostly ci
          "**/GarbageCollectedMemoryPoolTest.java")))
     (inputs
-     `(("java-slf4j-api" ,java-slf4j-api)
-       ("java-lz4" ,java-lz4)))
+     (list java-slf4j-api java-lz4))
     (native-inputs
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-all)
@@ -11886,7 +11834,7 @@ outputting XML data from Java code.")
        ("log4j-core" ,java-log4j-core)
        ("logging" ,java-commons-logging-minimal)))
     (propagated-inputs
-     `(("java-geronimo-parent-pom" ,java-geronimo-parent-pom)))
+     (list java-geronimo-parent-pom))
     (native-inputs
      `(("junit" ,java-junit)))
     (home-page "https://geronimo.apache.org/maven/xbean/3.6/xbean-reflect/")
@@ -12002,7 +11950,7 @@ public Bundle getBundle()"))
        #:source-dir "xbean-asm-util/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-asm" ,java-asm)))
+     (list java-asm))
     (native-inputs '())))
 
 (define-public java-geronimo-xbean-finder
@@ -12014,15 +11962,14 @@ public Bundle getBundle()"))
        #:source-dir "xbean-finder/src/main/java"
        #:test-dir "xbean-finder/src/test"))
     (inputs
-     `(("java-slf4j-api" ,java-slf4j-api)
-       ("java-asm" ,java-asm)
-       ("java-geronimo-xbean-bundleutils" ,java-geronimo-xbean-bundleutils)
-       ("java-geronimo-xbean-asm-util" ,java-geronimo-xbean-asm-util)
-       ("java-osgi-service-packageadmin" ,java-osgi-service-packageadmin)
-       ("java-osgi-framework" ,java-osgi-framework)))
+     (list java-slf4j-api
+           java-asm
+           java-geronimo-xbean-bundleutils
+           java-geronimo-xbean-asm-util
+           java-osgi-service-packageadmin
+           java-osgi-framework))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-gson
   (package
@@ -12041,8 +11988,7 @@ public Bundle getBundle()"))
        #:source-dir "gson/src/main/java"
        #:test-dir "gson/src/test"))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://github.com/google/gson")
     (synopsis "Java serialization/deserialization library from/to JSON")
     (description "Gson is a Java library that can be used to convert Java
@@ -12125,9 +12071,7 @@ including pre-existing objects that you do not have source-code of.")
          (replace 'install
            (install-from-pom "hawtjni-runtime/pom.xml")))))
     (inputs
-     `(("java-commons-cli" ,java-commons-cli)
-       ("java-asm" ,java-asm)
-       ("java-geronimo-xbean-finder" ,java-geronimo-xbean-finder)))
+     (list java-commons-cli java-asm java-geronimo-xbean-finder))
     (home-page "https://fusesource.github.io/hawtjni/")
     (synopsis "JNI code generator")
     (description "HawtJNI is a code generator that produces the JNI code needed
@@ -12192,7 +12136,7 @@ that is part of the SWT Tools project.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
-     `(("java-hawtjni" ,java-hawtjni)))
+     (list java-hawtjni))
     (home-page "https://fusesource.github.io/jansi/")
     (synopsis "Native library for jansi")
     (description "This package provides the native library for jansi, a small
@@ -12303,10 +12247,9 @@ sequences to format your console output which works on every platform.")
          (replace 'install
            (install-from-pom "jansi/pom.xml")))))
     (propagated-inputs
-     `(("java-jansi-native" ,java-jansi-native)))
+     (list java-jansi-native))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))))
+     (list java-junit java-hamcrest-core))))
 
 (define-public java-jboss-el-api-spec
   (package
@@ -12334,7 +12277,7 @@ sequences to format your console output which works on every platform.")
          (replace 'install
            (install-from-pom "pom.xml")))))
     (inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://github.com/jboss/jboss-el-api_spec")
     (synopsis "JSR-341 expression language 3.0 API")
     (description "This package contains an implementation of the JSR-341
@@ -12405,13 +12348,10 @@ specific events.")
          (replace 'install
            (install-from-pom "api/pom.xml")))))
     (propagated-inputs
-     `(("java-javax-inject" ,java-javax-inject)
-       ("java-jboss-el-api-spec" ,java-jboss-el-api-spec)
-       ("java-jboss-interceptors-api-spec" ,java-jboss-interceptors-api-spec)
-       ("java-weld-parent-pom" ,java-weld-parent-pom)))
+     (list java-javax-inject java-jboss-el-api-spec
+           java-jboss-interceptors-api-spec java-weld-parent-pom))
     (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-testng java-hamcrest-core))
     (home-page "http://cdi-spec.org/")
     (synopsis "Contexts and Dependency Injection APIs")
     (description "Java-cdi-api contains the required APIs for Contexts and
@@ -12438,10 +12378,9 @@ Dependency Injection (CDI).")
        ;; Contains only interfaces and base classes (no test)
        #:test-exclude (list "**/test*/**.java")))
     (inputs
-     `(("java-guava" ,java-guava)))
+     (list java-guava))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (home-page "https://www.joda.org/joda-convert/")
     (synopsis "Conversion between Objects and Strings")
     (description "Joda-Convert provides a small set of classes to aid
@@ -12505,11 +12444,9 @@ wider problem of Object to Object transformation.")
              (copy-recursively "src/test/resources" "build/test-classes")
              #t)))))
     (inputs
-     `(("java-joda-convert" ,java-joda-convert)))
+     (list java-joda-convert))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("tzdata" ,tzdata)))
+     (list java-junit java-hamcrest-core tzdata))
     (home-page "https://www.joda.org/joda-time/")
     (synopsis "Replacement for the Java date and time classes")
     (description "Joda-Time is a replacement for the Java date and time
@@ -12558,8 +12495,7 @@ classes prior to Java SE 8.")
             #t))
          (replace 'install (install-jars "build")))))
     (inputs
-     `(("java-apache-xml-commons-resolver" ,java-apache-xml-commons-resolver)
-       ("java-jaxp" ,java-jaxp)))
+     (list java-apache-xml-commons-resolver java-jaxp))
     (home-page "https://xerces.apache.org/xerces2-j/")
     (synopsis "Validating XML parser for Java with DOM level 3 support")
     (description "The Xerces2 Java parser is the reference implementation of
@@ -12646,7 +12582,7 @@ generator for Java.")
              (copy-recursively "src/main/resources" "build/classes")
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://jline.github.io")
     (synopsis "Console input handling library")
     (description "JLine is a Java library for handling console input.  It is
@@ -12669,23 +12605,22 @@ features that bring it on par with the Z shell line editor.")
      `(#:jdk ,icedtea-8
        ,@(package-arguments java-jline)))
     (inputs
-     `(("java-jansi" ,java-jansi-1)
-       ("java-jansi-native" ,java-jansi-native)))
-    (native-inputs
-     `(("java-powermock-modules-junit4" ,java-powermock-modules-junit4)
-       ("java-powermock-modules-junit4-common" ,java-powermock-modules-junit4-common)
-       ("java-powermock-api-easymock" ,java-powermock-api-easymock)
-       ("java-powermock-api-support" ,java-powermock-api-support)
-       ("java-powermock-core" ,java-powermock-core)
-       ("java-powermock-reflect" ,java-powermock-reflect)
-       ("java-easymock" ,java-easymock)
-       ("java-jboss-javassist" ,java-jboss-javassist)
-       ("java-objenesis" ,java-objenesis)
-       ("java-asm" ,java-asm)
-       ("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-cglib" ,java-cglib)
-       ("java-junit" ,java-junit)
-       ("java-hawtjni" ,java-hawtjni)))))
+     (list java-jansi-1 java-jansi-native))
+    (native-inputs
+     (list java-powermock-modules-junit4
+           java-powermock-modules-junit4-common
+           java-powermock-api-easymock
+           java-powermock-api-support
+           java-powermock-core
+           java-powermock-reflect
+           java-easymock
+           java-jboss-javassist
+           java-objenesis
+           java-asm
+           java-hamcrest-core
+           java-cglib
+           java-junit
+           java-hawtjni))))
 
 (define-public java-jline-terminal
   (package
@@ -12732,7 +12667,7 @@ features that bring it on par with the Z shell line editor.")
                         (string-append build "/jar/" jar-name)
                         (find-files ".")))))))))
     (inputs
-     `(("ncurses" ,ncurses))); infocmp
+     (list ncurses)); infocmp
     (home-page "https://github.com/jline/jline3")
     (synopsis "Java JLine Terminal API and implementations")
     (description "JLine is a Java library for handling console input.  It is
@@ -12770,10 +12705,9 @@ This package includes the @var{Terminal} API and implementations.")
              ;; conflicts with build directory generated by ant-build-system
              (delete-file "build"))))))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-easymock" ,java-easymock)))
+     (list java-junit java-easymock))
     (inputs
-     `(("java-jline-terminal" ,java-jline-terminal)))
+     (list java-jline-terminal))
     (home-page "https://github.com/jline/jline3")
     (synopsis "Java JLine line reader")
     (description "JLine is a Java library for handling console input.  It is
@@ -12842,8 +12776,7 @@ against expected outcomes.")
        #:source-dir "xmlunit-legacy/src/main/java"
        #:test-dir "xmlunit-legacy/src/test"))
     (inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-junit" ,java-junit)))
+     (list java-xmlunit java-junit))
     (native-inputs
      `(("java-mockito-1" ,java-mockito-1)))))
 
@@ -12875,8 +12808,7 @@ against expected outcomes.")
              (copy-recursively (assoc-ref inputs "resources") "test-resources")
              #t)))))
     (inputs
-     `(("java-xmlunit" ,java-xmlunit)
-       ("java-junit" ,java-junit)))))
+     (list java-xmlunit java-junit))))
 
 (define-public java-openchart2
   (package
@@ -12908,9 +12840,7 @@ against expected outcomes.")
              #t))
          (replace 'install (install-jars ".")))))
     (native-inputs
-     `(("unzip" ,unzip)
-       ("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list unzip java-junit java-hamcrest-core))
     (home-page "https://approximatrix.com/products/openchart2/")
     (synopsis "Simple plotting for Java")
     (description "Openchart2 provides a simple, yet powerful, interface for
@@ -13001,12 +12931,12 @@ authentication, HTTP state management, and HTTP connection management.")
                  "commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/hdfs"))
              #t)))))
     (inputs
-     `(("java-commons-collections4" ,java-commons-collections4)
-       ("java-commons-compress" ,java-commons-compress)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
-       ("java-commons-net" ,java-commons-net)
-       ("java-jsch" ,java-jsch)))
+     (list java-commons-collections4
+           java-commons-compress
+           java-commons-httpclient
+           java-commons-logging-minimal
+           java-commons-net
+           java-jsch))
     (home-page "https://commons.apache.org/proper/commons-vfs/")
     (synopsis "Java file system library")
     (description "Commons VFS provides a single API for accessing various
@@ -13080,7 +13010,7 @@ from ORO, Inc.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "build.xml"
                ;; Since we removed the bundled ant.jar, give the correct path
-               (("lib/ant.jar") (string-append (assoc-ref inputs "ant") "/lib/ant.jar"))
+               (("lib/ant.jar") (search-input-file inputs "/lib/ant.jar"))
                ;; We removed generated native libraries. We can only rebuild one
                ;; so don't fail if we can't find a native library for another architecture.
                (("zipfileset") "zipfileset erroronmissingarchive=\"false\""))
@@ -13099,12 +13029,9 @@ from ORO, Inc.")
          (replace 'install
            (install-jars "build")))))
     (inputs
-     `(("libffi" ,libffi)
-       ("libx11" ,libx11)
-       ("libxt" ,libxt)))
+     (list libffi libx11 libxt))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list gcc-7 java-junit java-hamcrest-core))
     (home-page "https://github.com/java-native-access/jna")
     (synopsis "Access to native shared libraries from Java")
     (description "JNA provides Java programs easy access to native shared
@@ -13134,8 +13061,7 @@ Java method invocation.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "nbproject/project.properties"
                (("../../build/jna.jar")
-                (string-append (assoc-ref inputs "java-native-access")
-                               "/share/java/jna.jar"))
+                (search-input-file inputs "/share/java/jna.jar"))
                (("../../lib/hamcrest-core-.*.jar")
                 (car (find-files (assoc-ref inputs "java-hamcrest-core")
                                  "jar$")))
@@ -13146,7 +13072,7 @@ Java method invocation.")
          (replace 'install
            (install-jars "dist")))))
     (inputs
-     `(("java-native-access" ,java-native-access)))
+     (list java-native-access))
     (synopsis "Cross-platform mappings for jna")
     (description "java-native-access-platform has cross-platform mappings
 and mappings for a number of commonly used platform functions, including a
@@ -13186,7 +13112,7 @@ will be allowed to use these programs for authentication.")
        #:source-dir "jsch-agent-proxy-sshagent/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch-agentproxy-core))
     (synopsis "Proxy to ssh-agent")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains the code for a proxy to
@@ -13201,8 +13127,7 @@ ssh-agent.")))
        #:source-dir "jsch-agent-proxy-usocket-jna/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-native-access" ,java-native-access)))
+     (list java-jsch-agentproxy-core java-native-access))
     (synopsis "USocketFactory implementation using JNA")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains an implementation of
@@ -13217,9 +13142,8 @@ USocketFactory using @dfn{JNA} (Java Native Access).")))
        #:source-dir "jsch-agent-proxy-pageant/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-native-access" ,java-native-access)
-       ("java-native-access-platform" ,java-native-access-platform)))
+     (list java-jsch-agentproxy-core java-native-access
+           java-native-access-platform))
     (synopsis "Proxy to pageant")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains the code for a proxy to
@@ -13234,7 +13158,7 @@ pageant.")))
        #:source-dir "jsch-agent-proxy-usocket-nc/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch-agentproxy-core))
     (synopsis "USocketFactory implementation using netcat")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains an implementation of
@@ -13249,11 +13173,9 @@ USocketFactory using netcat.")))
        #:source-dir "jsch-agent-proxy-connector-factory/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-jsch-agentproxy-sshagent" ,java-jsch-agentproxy-sshagent)
-       ("java-jsch-agentproxy-usocket-jna" ,java-jsch-agentproxy-usocket-jna)
-       ("java-jsch-agentproxy-pageant" ,java-jsch-agentproxy-pageant)
-       ("java-jsch-agentproxy-usocket-nc" ,java-jsch-agentproxy-usocket-nc)))
+     (list java-jsch-agentproxy-core java-jsch-agentproxy-sshagent
+           java-jsch-agentproxy-usocket-jna java-jsch-agentproxy-pageant
+           java-jsch-agentproxy-usocket-nc))
     (synopsis "Connector factory for jsch agent proxy")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a connector factory.")))
@@ -13267,8 +13189,7 @@ and Pageant included in Putty. This component contains a connector factory.")))
        #:source-dir "jsch-agent-proxy-jsch/src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-jsch" ,java-jsch)
-       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+     (list java-jsch java-jsch-agentproxy-core))
     (synopsis "JSch integration library for agentproxy")
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a library to use
@@ -13346,18 +13267,18 @@ jsch-agent-proxy with JSch.")))
                (chmod ivy #o755)
                #t))))))
     (inputs
-     `(("java-bouncycastle" ,java-bouncycastle)
-       ("java-commons-cli" ,java-commons-cli)
-       ("java-commons-collections" ,java-commons-collections)
-       ("java-commons-httpclient" ,java-commons-httpclient)
-       ("java-commons-lang" ,java-commons-lang)
-       ("java-commons-vfs" ,java-commons-vfs)
-       ("java-jakarta-oro" ,java-jakarta-oro)
-       ("java-jsch" ,java-jsch)
-       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
-       ("java-jsch-agentproxy-connector-factory" ,java-jsch-agentproxy-connector-factory)
-       ("java-jsch-agentproxy-jsch" ,java-jsch-agentproxy-jsch)
-       ("java-junit" ,java-junit)))
+     (list java-bouncycastle
+           java-commons-cli
+           java-commons-collections
+           java-commons-httpclient
+           java-commons-lang
+           java-commons-vfs
+           java-jakarta-oro
+           java-jsch
+           java-jsch-agentproxy-core
+           java-jsch-agentproxy-connector-factory
+           java-jsch-agentproxy-jsch
+           java-junit))
     (home-page "https://ant.apache.org/ivy")
     (synopsis "Dependency manager for the Java programming language")
     (description "Ivy is a tool for managing (recording, tracking, resolving
@@ -13398,20 +13319,19 @@ and reporting) project dependencies.  It is characterized by the following:
          (replace 'install
            (install-from-pom "org.eclipse.sisu.inject/pom.xml")))))
     (propagated-inputs
-     `(("java-guice" ,java-guice)
-       ("java-sisu-inject-parent-pom" ,java-sisu-inject-parent-pom)))
-    (inputs
-     `(("java-guice-servlet" ,java-guice-servlet)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-javaee-servletapi" ,java-javaee-servletapi)
-       ("java-junit" ,java-junit)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-jsr305" ,java-jsr305)
-       ("java-jsr250" ,java-jsr250)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-osgi-framework" ,java-osgi-framework)
-       ("java-osgi-util-tracker" ,java-osgi-util-tracker)
-       ("java-testng" ,java-testng)))
+     (list java-guice java-sisu-inject-parent-pom))
+    (inputs
+     (list java-guice-servlet
+           java-javax-inject
+           java-javaee-servletapi
+           java-junit
+           java-slf4j-api
+           java-jsr305
+           java-jsr250
+           java-cdi-api
+           java-osgi-framework
+           java-osgi-util-tracker
+           java-testng))
     (home-page "https://www.eclipse.org/sisu/")
     (synopsis "Classpath scanning, auto-binding, and dynamic auto-wiring")
     (description "Sisu is a modular JSR330-based container that supports
@@ -13501,23 +13421,23 @@ OSGi Service Registry is a goal of this project.")
          (replace 'install
            (install-from-pom "org.eclipse.sisu.plexus/pom.xml")))))
     (propagated-inputs
-     `(("java-plexus-classworlds" ,java-plexus-classworlds)
-       ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
-       ("java-cdi-api" ,java-cdi-api)
-       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
-       ("java-sisu-plexus-parent-pom" ,java-sisu-plexus-parent-pom)))
-    (inputs
-     `(("java-osgi-framework" ,java-osgi-framework)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ("java-javax-inject" ,java-javax-inject)
-       ("java-guice" ,java-guice)
-       ("java-guava" ,java-guava)
-       ("java-aopalliance" ,java-aopalliance)
-       ("java-asm" ,java-asm)
-       ("java-cglib" ,java-cglib)))
-    (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-plexus-classworlds
+           java-plexus-utils
+           java-plexus-component-annotations
+           java-cdi-api
+           java-eclipse-sisu-inject
+           java-sisu-plexus-parent-pom))
+    (inputs
+     (list java-osgi-framework
+           java-slf4j-api
+           java-javax-inject
+           java-guice
+           java-guava
+           java-aopalliance
+           java-asm
+           java-cglib))
+    (native-inputs
+     (list java-junit))
     (home-page "https://www.eclipse.org/sisu/")
     (synopsis "Plexus support for the sisu container")
     (description "Sisu is a modular JSR330-based container that supports
@@ -13585,10 +13505,9 @@ and @code{ISimpleCompiler} interfaces.")
              (chdir "janino")
              #t)))))
     (inputs
-     `(("java-commons-compiler" ,java-commons-compiler)))
+     (list java-commons-compiler))
     (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
+     (list java-junit java-hamcrest-core))
     (description "Janino is a Java compiler.  Janino can compile a set of
 source files to a set of class files like @code{javac}, but also compile a
 Java expression, block, class body or source file in memory, load the bytecode
@@ -13686,11 +13605,10 @@ This module lays the groundwork for the other two modules.")
              (invoke "ant" "jar")
              #t)))))
     (inputs
-     `(("java-logback-core" ,java-logback-core)
-       ("java-slf4j-api" ,java-slf4j-api)
-       ,@(package-inputs java-logback-core)))
+     (modify-inputs (package-inputs java-logback-core)
+       (prepend java-logback-core java-slf4j-api)))
     (native-inputs
-     `(("groovy" ,groovy)))
+     (list groovy))
     (description "Logback is intended as a successor to the popular log4j project.
 This module can be assimilated to a significantly improved version of log4j.
 Moreover, @code{logback-classic} natively implements the slf4j API so that you
@@ -13730,10 +13648,8 @@ such as log4j or @code{java.util.logging} (JUL).")))
                       (find-files "." "\\.properties$")))
              #t)))))
     (inputs
-     `(("java-classpathx-servletapi" ,java-classpathx-servletapi)
-       ("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))
+     (list java-classpathx-servletapi java-javaewah java-jsch
+           java-slf4j-api))
     (home-page "https://eclipse.org/jgit/")
     (synopsis "Java library implementing the Git version control system")
     (description "JGit is a lightweight, pure Java library implementing the
@@ -13768,9 +13684,7 @@ network protocols, and core version control algorithms.")
                  (("wordinbits") "WORD_IN_BITS"))
                #t))))))
     (inputs
-     `(("java-javaewah" ,java-javaewah)
-       ("java-jsch" ,java-jsch)
-       ("java-slf4j-api" ,java-slf4j-api)))))
+     (list java-javaewah java-jsch java-slf4j-api))))
 
 (define-public abcl
   (package
@@ -13789,7 +13703,7 @@ network protocols, and core version control algorithms.")
          "abcl-fix-build-xml.patch"))))
     (build-system ant-build-system)
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (arguments
      `(#:build-target "abcl.jar"
        #:test-target "abcl.test"
@@ -13884,7 +13798,7 @@ and allows building a Java object model for JSON text using API classes
                "build/classes")
              #t)))))
     (propagated-inputs
-     `(("java-jsonp-api" ,java-jsonp-api)))
+     (list java-jsonp-api))
     (description "JSON Processing (JSON-P) is a Java API to process (e.g.
 parse, generate, transform and query) JSON messages.  This package contains
 a reference implementation of that API.")))
@@ -13924,7 +13838,7 @@ a reference implementation of that API.")))
                (string-append (assoc-ref outputs "out") "/share/doc/java-xmp"))
              #t)))))
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (home-page "https://www.adobe.com/devnet/xmp.html")
     (synopsis "Extensible Metadat Platform (XMP) support in Java")
     (description "Adobe's Extensible Metadata Platform (XMP) is a labeling
@@ -13981,7 +13895,7 @@ library and the API is similar.")
                                "spi/Messages_ru.properties")))
              #t)))))
     (native-inputs
-     `(("java-junit" ,java-junit)))
+     (list java-junit))
     (home-page "https://args4j.kohsuke.org/")
     (synopsis "Command line parser library")
     (description "Args4j is a small Java class library that makes it easy to
@@ -14014,10 +13928,9 @@ parse command line options/arguments in your CUI application.")
                (("/java\">") "\">"))
              #t)))))
     (propagated-inputs
-     `(("java-xmp" ,java-xmp)))
+     (list java-xmp))
     (native-inputs
-     `(("java-hamcrest-core" ,java-hamcrest-core)
-       ("java-junit" ,java-junit)))
+     (list java-hamcrest-core java-junit))
     (home-page "https://github.com/drewnoakes/metadata-extractor")
     (synopsis "Extract metadata from image and video files")
     (description "Metadata-extractor is a straightforward Java library for
@@ -14064,7 +13977,7 @@ IPTC, XMP, ICC and more formats.")
          (replace 'install
            (install-jars "dist")))))
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (home-page "https://github.com/blackears/svgSalamander")
     (synopsis "SVG engine for Java")
     (description "SVG Salamander is an SVG engine for Java that's designed
@@ -14093,8 +14006,7 @@ rich interactive menus to charts and graphcs to complex animations.")
        #:source-dir "src/main/java"
        #:tests? #f)); no tests
     (inputs
-     `(("java-cdi-api" ,java-cdi-api)
-       ("java-jboss-interceptors-api-spec" ,java-jboss-interceptors-api-spec)))
+     (list java-cdi-api java-jboss-interceptors-api-spec))
     (home-page "https://github.com/jboss/jboss-transaction-api_spec")
     (synopsis "Generic transaction management API in Java")
     (description "Java-jboss-transaction-api-spec implements the Transactions
@@ -14235,11 +14147,9 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
          (replace 'install
            (install-jars "build/jar")))))
     (inputs
-     `(("java-guava" ,java-guava)
-       ("java-jboss-javassist" ,java-jboss-javassist)
-       ("java-jsonp-api" ,java-jsonp-api)))
+     (list java-guava java-jboss-javassist java-jsonp-api))
     (native-inputs
-     `(("javacc" ,javacc)))
+     (list javacc))
     (home-page "http://javaparser.org/")
     (synopsis "Parser for Java")
     (description
@@ -14323,15 +14233,14 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
                                                       "/test-model/pcal")
                                        "\\.cfg$"))))
              (replace 'install
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let* ((share (string-append %output "/share/java"))
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((share (string-append (assoc-ref outputs "out") "/share/java"))
                         (jar-name "tla2tools.jar"); set in project.properties
                         (jar (string-append ,tlatools
                                             "/dist/" jar-name))
                         (java-cp (string-append share "/" jar-name))
-                        (bin (string-append %output "/bin"))
-                        (java (string-append (assoc-ref inputs "jdk")
-                                             "/bin/java")))
+                        (bin (string-append (assoc-ref outputs "out") "/bin"))
+                        (java (search-input-file inputs "/bin/java")))
                    (install-file jar share)
                    (mkdir-p bin)
                    ;; Generate wrapper scripts for bin/, which invoke common
@@ -14356,16 +14265,15 @@ can be interpreted by IDEs and static analysis tools to improve code analysis.")
                       ("tlc2" . "tlc2.TLC")
                       ("tlc2-repl" . "tlc2.REPL"))))))))))
       (native-inputs
-       `(("java-junit" ,java-junit)
-         ("java-easymock" ,java-easymock)))
+       (list java-junit java-easymock))
       (inputs
-       `(("java-javax-mail" ,java-javax-mail)
-         ("java-gson" ,java-gson-2.8.6)
-         ("java-jline-terminal" ,java-jline-terminal)
-         ("java-jline-reader" ,java-jline-reader)
-         ("java-eclipse-lsp4j-jsonrpc" ,java-eclipse-lsp4j-jsonrpc)
-         ("java-eclipse-lsp4j-jsonrpc-debug" ,java-eclipse-lsp4j-jsonrpc-debug)
-         ("java-eclipse-lsp4j-debug" ,java-eclipse-lsp4j-debug)))
+       (list java-javax-mail
+             java-gson-2.8.6
+             java-jline-terminal
+             java-jline-reader
+             java-eclipse-lsp4j-jsonrpc
+             java-eclipse-lsp4j-jsonrpc-debug
+             java-eclipse-lsp4j-debug))
       (home-page "https://lamport.azurewebsites.net/tla/tools.html")
       (synopsis "TLA+ tools (analyzer, TLC, TLATeX, PlusCal translator)")
       (description "TLA+ is a high-level language for modeling programs and