gnu: Add java-geronimo-xbean-asm-util.
[jackhill/guix/guix.git] / gnu / packages / java.scm
index 77e34a2..30e0115 100644 (file)
@@ -5,6 +5,8 @@
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
+;;; Copyright © 2016, 2017, 2018 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +29,7 @@
   #:use-module (guix download)
   #:use-module (guix hg-download)
   #:use-module (guix git-download)
+  #:use-module (guix svn-download)
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
@@ -1067,7 +1070,7 @@ bootstrapping purposes.")
     (license license:gpl2+)))
 
 (define-public icedtea-7
-  (let* ((version "2.6.11")
+  (let* ((version "2.6.12")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
@@ -1085,7 +1088,7 @@ bootstrapping purposes.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "1ibp6ybqnf8g7mbs45bkbv44dwz4h2w9gr4rh15yvr1m8lqkq1i0"))
+                  "0s0zh0mj1sab99kb516lsgq3859vsc951phc565gwix4l5g9zppk"))
                 (modules '((guix build utils)))
                 (snippet
                  '(substitute* "Makefile.in"
@@ -1495,25 +1498,25 @@ bootstrapping purposes.")
       (native-inputs
        `(("openjdk-src"
           ,(drop "openjdk"
-                 "1zhr4l9kxnbzghcsgjk3vmih9qpg1wrr9qry7fx04l97svp1ylhd"))
+                 "15qf3nfidgnigh2zny6djfp8bhfwjnwk9i06mxs2jbq6na953ql2"))
          ("corba-drop"
           ,(drop "corba"
-                 "108v15ncb2rnsyzgzncjlm1f57d1sv60zd9qbpas8kqmvpp8r0gz"))
+                 "1phvn8fyl5mw2n2sn97f17nm442k75xsz2023bfw4h66ywzkqhqy"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "0zcpcmm3g1s7m31glrbw3ys7azi97ixcvbyxd40y9xzdja3jyr52"))
+                 "0j4ms6lmnfa2cwfh9yfqdfg1bnn3fc40ay4x6k8zqa8yvspik5w5"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "1gkqm0p3sr8d0xpki3fhf7cvmgqxx8ambgl5f3jx2plfnhsg96d2"))
+                 "09sddj73k7n29s39hvdk14r130mvlknbxkpd2w58f34sq5sgpdrg"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "1d9fjnzdx4m6gwkvmj2n097ag0mvkhm3lldaxjki8x8c6a5clknf"))
+                 "0q896zz8wyswmksy225q1k27nz3v3l27052dcvvpv20ryykz8yp7"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "0zscdp9arcq7gr8j7jq4m75gq0w1i3ryxpdnrc8fl0msh4w2s2k5"))
+                 "0niicyfccim4a9is4akh87jd7wbl8jrazdaab957mcv9l1x3bnqc"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "1y6vnssn5y50x27g4ypdb5wwpmi7zf7jdi8gqbymkwf6n8p5y1d6"))
+                 "1jw42qhbm3wfavk39304m53lmqipcllrvjqiab2f42mjs10i8gfx"))
          ("ant" ,ant-bootstrap)
          ("attr" ,attr)
          ("coreutils" ,coreutils)
@@ -1563,7 +1566,7 @@ IcedTea build harness.")
       (license license:gpl2+))))
 
 (define-public icedtea-8
-  (let* ((version "3.5.1")
+  (let* ((version "3.6.0")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
@@ -1572,7 +1575,7 @@ IcedTea build harness.")
                          "/icedtea8/" version "/" name ".tar.xz"))
                    (sha256 (base32 hash))))))
     (package (inherit icedtea-7)
-      (version "3.5.1")
+      (version "3.6.0")
       (source (origin
                 (method url-fetch)
                 (uri (string-append
@@ -1580,7 +1583,7 @@ IcedTea build harness.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "1j8iv0cdk9fkh3yb5is7z29m9k3s89w6y9090538j6aa7p4nmalf"))
+                  "0zj192zrrxqh6j1ywc3399gk2ycay9w8pvzcvvr2kvdkb37ak86h"))
                 (modules '((guix build utils)))
                 (snippet
                  '(begin
@@ -1656,34 +1659,34 @@ IcedTea build harness.")
        `(("jdk" ,icedtea-7 "jdk")
          ("openjdk-src"
           ,(drop "openjdk"
-                 "0a6yrq8y1zkzc7hm2l28rm3vzy5izfxhmmhhhvc91lhfclnqcd2q"))
+                 "0mqxh81kq05z4wydkik0yrr81ibf84xmwsdcw9n2gfrzs4f5jxnb"))
          ("aarch32-drop"
           ,(drop "aarch32"
-                 "0cway5a5hcfyh4pzl9zz5xr7lil4gsliy6r5iqbaasd2d9alvqiq"))
+                 "0b207g2n6kn510zf5vwh58bsxgqrmkvrna4p20r74v9cwcwx83n2"))
          ("corba-drop"
           ,(drop "corba"
-                 "031sc6byd8lqvz3cd07phm13pqrxalxk9f3a2q8pim5n4sbsy0qb"))
+                 "0qinc1q4w01nkr9klhfyd8caxvyrrfxjrz32nd7kgyja2bj8x7dd"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "1815jaj0k0w1s0g0jr1ahkajp1jx2qlb08i6l9ha4wyqqyp49a4n"))
+                 "07azrp3g86vk2laybmr5xfn0yrljkxs0rlm1q48385br225bgdxi"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "0vh4f85cxhqvabzg86ycpz02519cdzgsn5dr75k22rkmbbxnbbl6"))
+                 "018fd2hq57zp3pq06wlxy5pabqcyk36xi8hk0d6xk3a90wsjvyik"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "196ycqz4d9kknc6b219q4ib83l1kkl6w6l1cznw9bzaafyynqa35"))
+                 "0vs488kq5j2cc6kplc78jbhfxwq4fn06l34xrbq4d6y17777arg8"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "0ssnadlr5cxhmj06nmni34kdynix1sjhcvjzahm5yzfd7dfllmgy"))
+                 "04f6d1wvck5jrpvrcw5gsbzxnihcry9zrf1v85czdm959q21zv9c"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "0f7fxf0s9kadvs80hm5ga72pyp9r0fvl8zm1wmd1wrks8kl79sd6"))
+                 "1mfgpzyr6zzy9klf8nn3z6d41fydb9ghpfpqzjq3cl95axfbdl1g"))
          ("nashorn-drop"
           ,(drop "nashorn"
-                 "0m95qgnd4z6p0xp9m06ihss7skx2yrm7xw69jsjsrxpriy1shiwy"))
+                 "1a26cmzbs50gkh4rmmmxls7zljx62vfp1wq02gsfd5jqs4xvlibj"))
          ("shenandoah-drop"
           ,(drop "shenandoah"
-                 "0yjlcgp6mldp30hmkfl68mdwlbg3gb0m6xd5y7srczni7cln5f3i"))
+                 "11hmn9mwmvryfddcanzx3qffjm8bbiv18nwv3iy9cswrvxjy010f"))
          ,@(fold alist-delete (package-native-inputs icedtea-7)
                  '("jdk" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
                    "jdk-drop" "langtools-drop" "hotspot-drop")))))))
@@ -1751,6 +1754,70 @@ IcedTea build harness.")
     (native-inputs
      `(("jdk" ,icedtea-7 "jdk")))))
 
+(define-public ant-apache-bcel
+  (package
+    (inherit ant/java8)
+    (name "ant-apache-bcel")
+    (arguments
+     (substitute-keyword-arguments (package-arguments ant/java8)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'link-bcel
+             (lambda* (#:key inputs #:allow-other-keys)
+               (for-each (lambda (file)
+                           (symlink file
+                                    (string-append "lib/optional/"
+                                                   (basename file))))
+                         (find-files (assoc-ref inputs "java-commons-bcel")
+                                     "\\.jar$"))
+               #t))
+           (add-after 'build 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out   (assoc-ref outputs "out"))
+                      (share (string-append out "/share/java"))
+                      (bin   (string-append out "/bin"))
+                      (lib   (string-append out "/lib")))
+                 (mkdir-p share)
+                 (install-file (string-append lib "/ant-apache-bcel.jar") share)
+                 (delete-file-recursively bin)
+                 (delete-file-recursively lib)
+                 #t)))))))
+    (inputs
+     `(("java-commons-bcel" ,java-commons-bcel)
+       ,@(package-inputs ant/java8)))))
+
+(define-public ant-junit
+  (package
+    (inherit ant/java8)
+    (name "ant-junit")
+    (arguments
+     (substitute-keyword-arguments (package-arguments ant/java8)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'link-junit
+             (lambda* (#:key inputs #:allow-other-keys)
+               (for-each (lambda (file)
+                           (symlink file
+                                    (string-append "lib/optional/"
+                                                   (basename file))))
+                         (find-files (assoc-ref inputs "java-junit")
+                                     "\\.jar$"))
+               #t))
+           (add-after 'build 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out   (assoc-ref outputs "out"))
+                      (share (string-append out "/share/java"))
+                      (bin   (string-append out "/bin"))
+                      (lib   (string-append out "/lib")))
+                 (mkdir-p share)
+                 (install-file (string-append lib "/ant-junit.jar") share)
+                 (delete-file-recursively bin)
+                 (delete-file-recursively lib)
+                 #t)))))))
+    (inputs
+     `(("java-junit" ,java-junit)
+       ,@(package-inputs ant/java8)))))
+
 (define-public clojure
   (let* ((remove-archives '(begin
                              (for-each delete-file
@@ -1766,15 +1833,15 @@ IcedTea build harness.")
                         (snippet remove-archives)))))
     (package
       (name "clojure")
-      (version "1.8.0")
+      (version "1.9.0")
       (source
        (origin
          (method url-fetch)
          (uri
-          (string-append "http://repo1.maven.org/maven2/org/clojure/clojure/"
-                         version "/clojure-" version ".zip"))
+          (string-append "https://github.com/clojure/clojure/archive/clojure-"
+                         version ".tar.gz"))
          (sha256
-          (base32 "1nip095fz5c492sw15skril60i1vd21ibg6szin4jcvyy3xr6cym"))
+          (base32 "0xjbzcw45z32vsn9pifp7ndysjzqswp5ig0jkjpivigh2ckkdzha"))
          (modules '((guix build utils)))
          (snippet remove-archives)))
       (build-system ant-build-system)
@@ -1804,12 +1871,12 @@ IcedTea build harness.")
                         (error "failed to unpack tarball" name)))
                   (copy-recursively (string-append name "/src/main/clojure/")
                                     "src/clj/"))
-                '("data-generators-src"
-                  "java-classpath-src"
+                '("core-specs-alpha-src"
+                  "data-generators-src"
+                  "spec-alpha-src"
                   "test-check-src"
                   "test-generative-src"
-                  "tools-namespace-src"
-                  "tools-reader-src"))
+                  "tools-namespace-src"))
                #t))
            ;; The javadoc target is not built by default.
            (add-after 'build 'build-doc
@@ -1841,14 +1908,18 @@ IcedTea build harness.")
                  #t))))))
       ;; The native-inputs below are needed to run the tests.
       (native-inputs
-       `(("data-generators-src"
+       `(("core-specs-alpha-src"
+          ,(submodule "core.specs.alpha/archive/core.specs.alpha-"
+                      "0.1.24"
+                      "0v2a0svf1ar2y42ajxwsjr7zmm5j7pp2zwrd2jh3k7xzd1p9x1fv"))
+         ("data-generators-src"
           ,(submodule "data.generators/archive/data.generators-"
                       "0.1.2"
                       "0kki093jp4ckwxzfnw8ylflrfqs8b1i1wi9iapmwcsy328dmgzp1"))
-         ("java-classpath-src"
-          ,(submodule "java.classpath/archive/java.classpath-"
-                      "0.2.3"
-                      "0sjymly9xh1lkvwn5ygygpsfwz4dabblnlq0c9bx76rkvq62fyng"))
+         ("spec-alpha-src"
+          ,(submodule "spec.alpha/archive/spec.alpha-"
+                      "0.1.143"
+                      "00alf0347licdn773w2jarpllyrbl52qz4d8mw61anjksacxylzz"))
          ("test-check-src"
           ,(submodule "test.check/archive/test.check-"
                       "0.9.0"
@@ -1860,11 +1931,7 @@ IcedTea build harness.")
          ("tools-namespace-src"
           ,(submodule "tools.namespace/archive/tools.namespace-"
                       "0.2.11"
-                      "10baak8v0hnwz2hr33bavshm7y49mmn9zsyyms1dwjz45p5ymhy0"))
-         ("tools-reader-src"
-          ,(submodule "tools.reader/archive/tools.reader-"
-                      "1.0.0"
-                      "1lafblmmj4hkg0aqrf19qkdw9wdcsh3qxmn6cbkmnzbhffpyv2lv"))))
+                      "10baak8v0hnwz2hr33bavshm7y49mmn9zsyyms1dwjz45p5ymhy0"))))
       (home-page "https://clojure.org/")
       (synopsis "Lisp dialect running on the JVM")
       (description "Clojure is a dynamic, general-purpose programming language,
@@ -1892,6 +1959,62 @@ designs.")
                      license:asl2.0
                      license:cpl1.0)))))
 
+(define-public javacc
+  (package
+    (name "javacc")
+    (version "7.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/javacc/javacc/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append "javacc-" version ".tar.gz"))
+              (sha256
+               (base32
+                "111xc9mnmc5a6qz6x3xbhqc07y1lg2b996ggzw0hrblg42zya9xf"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-bundled-libs
+           (lambda _
+             (delete-file-recursively "lib") #t))
+         (replace 'install (install-jars "target")))))
+    (home-page "https://javacc.org/")
+    (synopsis "Java parser generator")
+    (description "Java Compiler Compiler (JavaCC) is the most popular parser
+generator for use with Java applications.  A parser generator is a tool that
+reads a grammar specification and converts it to a Java program that can
+recognize matches to the grammar.  In addition to the parser generator itself,
+JavaCC provides other standard capabilities related to parser generation such
+as tree building (via a tool called JJTree included with JavaCC), actions,
+debugging, etc.")
+    (license license:bsd-3)))
+
+(define-public javacc-4
+  (package (inherit javacc)
+    (version "4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/javacc/javacc.git")
+                    (commit "release_41")))
+              (file-name (string-append "javacc-" version "-checkout"))
+              (sha256
+               (base32
+                "07ysav7j8r1c6h8qxrgqk6lwdp74ly0ad1935lragxml0qqc3ka0"))))
+    ;; Tests fail with
+    ;; /tmp/guix-build-javacc-4.1.drv-0/source/test/javacodeLA/build.xml:60:
+    ;; JAVACODE failed
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-bundled-libs
+           (lambda _
+             (delete-file-recursively "lib") #t))
+         (replace 'install (install-jars "bin/lib")))))))
+
 (define-public java-classpathx-servletapi
   (package
     (name "java-classpathx-servletapi")
@@ -1930,15 +2053,15 @@ API and version 2.1 of the Java ServerPages API.")
 (define-public java-swt
   (package
     (name "java-swt")
-    (version "4.6")
+    (version "4.7.1a")
     (source
      ;; The types of many variables and procedures differ in the sources
      ;; dependent on whether the target architecture is a 32-bit system or a
      ;; 64-bit system.  Instead of patching the sources on demand in a build
      ;; phase we download either the 32-bit archive (which mostly uses "int"
      ;; types) or the 64-bit archive (which mostly uses "long" types).
-     (let ((hash32 "0jmx1h65wqxsyjzs64i2z6ryiynllxzm13cq90fky2qrzagcw1ir")
-           (hash64 "0wnd01xssdq9pgx5xqh5lfiy3dmk60dzzqdxzdzf883h13692lgy")
+     (let ((hash32 "09q0cbh90d90q3a7dx9430kc4m6bijrkr4lajrmzzvi0jjdpq4v9")
+           (hash64 "17k5hs75a87ssmc5xhwdfdm2gn4zba0r837l2455za01krnkaa2q")
            (file32 "x86")
            (file64 "x86_64"))
        (let-values (((hash file)
@@ -1948,13 +2071,14 @@ API and version 2.1 of the Java ServerPages API.")
          (origin
            (method url-fetch)
            (uri (string-append
-                 "http://ftp-stud.fht-esslingen.de/pub/Mirrors/"
-                 "eclipse/eclipse/downloads/drops4/R-" version
-                 "-201606061100/swt-" version "-gtk-linux-" file ".zip"))
+                 "http://download.eclipse.org/eclipse/downloads/drops4/"
+                 "R-" version "-201710090410/swt-" version
+                 "-gtk-linux-" file ".zip"))
            (sha256 (base32 hash))))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "swt.jar"
+       #:jdk ,icedtea-8
        #:tests? #f ; no "check" target
        #:phases
        (modify-phases %standard-phases
@@ -1988,8 +2112,7 @@ API and version 2.1 of the Java ServerPages API.")
                          (find-files "." "\\.so$"))
                #t))))))
     (inputs
-     `(("xulrunner" ,icecat)
-       ("gtk" ,gtk+-2)
+     `(("gtk" ,gtk+-2)
        ("libxtst" ,libxtst)
        ("libxt" ,libxt)
        ("mesa" ,mesa)
@@ -2034,7 +2157,7 @@ is implemented.")
           (lambda _ (chdir "..") #t)))))
    (native-inputs
     `(("unzip" ,unzip)))
-   (home-page "http://tukaani.org/xz/java.html")
+   (home-page "https://tukaani.org/xz/java.html")
    (synopsis "Implementation of XZ data compression in pure Java")
    (description "This library aims to be a complete implementation of XZ data
 compression in pure Java.  Single-threaded streamed compression and
@@ -2336,6 +2459,209 @@ package within @code{plexus-utils}, but has been separated in order to allow
 these two libraries to vary independently of one another.")
     (license license:asl2.0)))
 
+(define-public java-plexus-classworlds
+  (package
+    (name "java-plexus-classworlds")
+    (version "2.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/"
+                                  "plexus-classworlds/archive/plexus-classworlds-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1qm4p0rl8d82lzhsiwnviw11jnq44s0gflg78zq152xyyr2xmh8g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-classworlds.jar"
+       #:source-dir "src/main"
+       #:tests? #f));; FIXME: we need to generate some resources as in pom.xml
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://codehaus-plexus.github.io/plexus-classworlds/")
+    (synopsis "Java class loader framework")
+    (description "Plexus classworlds replaces the native @code{ClassLoader}
+mechanism of Java.  It is especially useful for dynamic loading of application
+components.")
+    (license license:asl2.0)))
+
+(define-public java-plexus-container-default-bootstrap
+  (package
+    (name "java-plexus-container-default-bootstrap")
+    (version "1.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/plexus-containers"
+                                  "/archive/plexus-containers-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0xw5g30qf4a83608rw9v2hv8pfsz7d69dkdhk6r0wia4q78hh1pc"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "container-default.jar"
+       #:source-dir "plexus-container-default/src/main/java"
+       #:test-dir "plexus-container-default/src/test"
+       #:jdk ,icedtea-8
+       #:tests? #f; requires plexus-archiver, which depends on this package
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively
+               "plexus-container-default/src/main/resources/"
+               "build/classes")
+             #t)))))
+    (inputs
+     `(("worldclass" ,java-plexus-classworlds)
+       ("xbean" ,java-geronimo-xbean-reflect)
+       ("utils" ,java-plexus-utils)
+       ("junit" ,java-junit)
+       ("guava" ,java-guava)))
+    (home-page "https://github.com/codehaus-plexus/plexus-containers")
+    (synopsis "Inversion-of-control container")
+    (description "Plexus-default-container is Plexus' inversion-of-control
+(@dfn{IoC}) container.  It is composed of its public API and its default
+implementation.")
+    (license license:asl2.0)))
+
+(define-public java-plexus-io
+  (package
+    (name "java-plexus-io")
+    (version "3.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/plexus-io"
+                                  "/archive/plexus-io-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0f2j41kihaymxkpbm55smpxjja235vad8cgz94frfy3ppcp021dw"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-io.jar"
+       #:source-dir "src/main/java"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes/META-INF/plexus")
+             (copy-file "src/main/resources/META-INF/plexus/components.xml"
+                        "build/classes/META-INF/plexus/components.xml")
+             #t)))))
+    (inputs
+     `(("utils" ,java-plexus-utils)
+       ("commons-io" ,java-commons-io)
+       ("java-jsr305" ,java-jsr305)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)
+       ("guava" ,java-guava)
+       ("classworlds" ,java-plexus-classworlds)
+       ("xbean" ,java-geronimo-xbean-reflect)
+       ("container-default" ,java-plexus-container-default-bootstrap)))
+    (home-page "https://github.com/codehaus-plexus/plexus-io")
+    (synopsis "I/O plexus components")
+    (description "Plexus IO is a set of plexus components, which are designed
+for use in I/O operations.  This implementation using plexus components allows
+reusing it in maven.")
+    (license license:asl2.0)))
+
+(define-public java-plexus-archiver
+  (package
+    (name "java-plexus-archiver")
+    (version "3.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/plexus-archiver"
+                                  "/archive/plexus-archiver-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0iv1j7khra6icqh3jndng3iipfmkc7l5jq2y802cm8r575v75pyv"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-archiver.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:test-dir "src/test"
+       #:test-exclude (list "**/Abstract*.java" "**/Base*.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'remove-failing
+           (lambda _
+             ;; Requires an older version of plexus container
+             (delete-file
+               "src/test/java/org/codehaus/plexus/archiver/DuplicateFilesTest.java")))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes/META-INF/plexus")
+             (copy-file "src/main/resources/META-INF/plexus/components.xml"
+                        "build/classes/META-INF/plexus/components.xml")
+             #t)))))
+    (inputs
+     `(("utils" ,java-plexus-utils)
+       ("commons-io" ,java-commons-io)
+       ("snappy" ,java-iq80-snappy)
+       ("io" ,java-plexus-io)
+       ("compress" ,java-commons-compress)
+       ("container-default" ,java-plexus-container-default-bootstrap)
+       ("snappy" ,java-snappy)
+       ("java-jsr305" ,java-jsr305)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("classworld" ,java-plexus-classworlds)
+       ("xbean" ,java-geronimo-xbean-reflect)
+       ("xz" ,java-tukaani-xz)
+       ("guava" ,java-guava)))
+    (home-page "https://github.com/codehaus-plexus/plexus-archiver")
+    (synopsis "Archiver component of the Plexus project")
+    (description "Plexus-archiver contains a component to deal with project
+archives (jar).")
+    (license license:asl2.0)))
+
+(define-public java-plexus-container-default
+  (package
+    (inherit java-plexus-container-default-bootstrap)
+    (name "java-plexus-container-default")
+    (arguments
+     `(#:jar-name "container-default.jar"
+       #:source-dir "plexus-container-default/src/main/java"
+       #:test-dir "plexus-container-default/src/test"
+       #:test-exclude (list ;"**/*Test.java"
+                            "**/Abstract*.java"
+                            ;; Requires plexus-hierarchy
+                            "**/PlexusHierarchyTest.java"
+                            ;; Failures
+                            "**/ComponentRealmCompositionTest.java"
+                            "**/PlexusContainerTest.java")
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively
+               "plexus-container-default/src/main/resources/"
+               "build/classes")
+             #t))
+         (add-before 'check 'fix-paths
+           (lambda _
+             (let ((dir "plexus-container-default/src/test/java/org/codehaus"))
+               (substitute*
+                 (string-append
+                   dir "/plexus/component/composition/"
+                   "ComponentRealmCompositionTest.java")
+                 (("src/test") "plexus-container-default/src/test"))
+               #t))))))
+    (inputs
+     `(("worldclass" ,java-plexus-classworlds)
+       ("xbean" ,java-geronimo-xbean-reflect)
+       ("utils" ,java-plexus-utils)
+       ("junit" ,java-junit)
+       ("guava" ,java-guava)))
+    (native-inputs
+     `(("archiver" ,java-plexus-archiver)
+       ("hamcrest" ,java-hamcrest-core)))))
+
 (define-public java-asm
   (package
     (name "java-asm")
@@ -2759,7 +3085,7 @@ available in the Java programming language or Commons Lang.")
     (synopsis "Benchmark harness for the JVM")
     (description "JMH is a Java harness for building, running, and analysing
 nano/micro/milli/macro benchmarks written in Java and other languages
-targetting the JVM.")
+targeting the JVM.")
     ;; GPLv2 only
     (license license:gpl2)))
 
@@ -2823,6 +3149,80 @@ are many features, including:
 @end itemize\n")
     (license license:asl2.0)))
 
+(define-public java-commons-collections
+  (package
+    (inherit java-commons-collections4)
+    (name "java-commons-collections")
+    (version "3.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/collections/source/"
+                                  "commons-collections-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "055r51a5lfc3z7rkxnxmnn1npvkvda7636hjpm4qk7cnfzz98387"))))
+    (arguments
+      (substitute-keyword-arguments (package-arguments java-commons-collections4)
+        ((#:phases phases)
+          `(modify-phases ,phases
+            ;; The manifest is required by the build procedure
+            (add-before 'build 'add-manifest
+              (lambda _
+                (mkdir-p "build/conf")
+                (call-with-output-file "build/conf/MANIFEST.MF"
+                  (lambda (file)
+                    (format file "Manifest-Version: 1.0\n")))))
+            (replace 'install
+              (install-jars "build"))))))))
+
+(define java-commons-collections-test-classes
+  (package
+    (inherit java-commons-collections)
+    (arguments
+     `(#:jar-name "commons-collections-test-classes.jar"
+       #:source-dir "src/test"
+       #:tests? #f))
+    (inputs
+     `(("collection" ,java-commons-collections)))))
+
+(define-public java-commons-beanutils
+  (package
+    (name "java-commons-beanutils")
+    (version "1.9.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/beanutils/source/"
+                                  "commons-beanutils-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "03cs0bq3sl1sdc7py9g3qnf8n9h473nrkvd3d251kaqv6a2ab7qk"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (rename-file (string-append "dist/commons-beanutils-" ,version
+                                         "-SNAPSHOT.jar")
+                          "commons-beanutils.jar")
+             (install-file "commons-beanutils.jar"
+               (string-append (assoc-ref outputs "out") "/share/java/"))
+             #t)))))
+    (inputs
+     `(("logging" ,java-commons-logging-minimal)
+       ("collections" ,java-commons-collections)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("collections-test" ,java-commons-collections-test-classes)))
+    (home-page "http://commons.apache.org/beanutils/")
+    (synopsis "Dynamically set or get properties in Java")
+    (description "BeanUtils provides a simplified interface to reflection and
+introspection to set or get dynamically determined properties through their
+setter and getter method.")
+    (license license:asl2.0)))
+
 (define-public java-commons-io
   (package
     (name "java-commons-io")
@@ -3386,32 +3786,43 @@ working with compressed files such as ar, cpio, Unix dump, tar, zip, gzip, XZ,
 Pack200, bzip2, 7z, arj, lzma, snappy, DEFLATE, lz4 and Z files.")
     (license license:asl2.0)))
 
-(define-public java-commons-net
+(define-public java-commons-csv
   (package
-    (name "java-commons-net")
-    (version "3.6")
+    (name "java-commons-csv")
+    (version "1.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://apache/commons/net/source/"
-                                  "commons-net-" version "-src.tar.gz"))
+              (uri (string-append "mirror://apache/commons/csv/source/"
+                                  "commons-csv-" version "-src.tar.gz"))
               (sha256
                (base32
-                "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr"))))
+                "1l89m0fm2s3xx3v3iynvangymfg2vlyngaj6fgsi457nmsw7m7ij"))))
     (build-system ant-build-system)
     (arguments
-     `(;; FIXME: MainTest.java tries to read "examples.properties" (which
-       ;; should be "resources/examples/examples.properties"), but gets "null"
-       ;; instead.
-       #:tests? #f
-       #:jar-name "commons-net.jar"))
-    (native-inputs
-     `(("java-junit" ,java-junit)
-       ("java-hamcrest-core" ,java-hamcrest-core)))
-    (home-page "http://commons.apache.org/net/")
-    (synopsis "Client library for many basic Internet protocols")
-    (description "The Apache Commons Net library implements the client side of
-many basic Internet protocols.  The purpose of the library is to provide
-fundamental protocol access, not higher-level abstractions.")
+     `(#:jar-name "commons-csv.jar"
+       #:source-dir "src/main/java"
+       #:tests? #f)); FIXME: requires java-h2
+    (inputs
+     `(("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-commons-io" ,java-commons-io)
+       ("java-commons-lang3" ,java-commons-lang3)
+       ("junit" ,java-junit)))
+    (home-page "https://commons.apache.org/proper/commons-csv/")
+    (synopsis "Read and write CSV documents")
+    (description "Commons CSV reads and writes files in variations of the Comma
+Separated Value (CSV) format.  The most common CSV formats are predefined in the
+CSVFormat class:
+
+@itemize
+@item Microsoft Excel
+@item Informix UNLOAD
+@item Informix UNLOAD CSV
+@item MySQL
+@item RFC 4180
+@item TDF
+@end itemize
+
+Custom formats can be created using a fluent style API.")
     (license license:asl2.0)))
 
 (define-public java-osgi-annotation
@@ -3430,7 +3841,7 @@ fundamental protocol access, not higher-level abstractions.")
     (arguments
      `(#:tests? #f ; no tests
        #:jar-name "osgi-annotation.jar"))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Annotation module of OSGi framework")
     (description
      "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -3457,7 +3868,7 @@ components.")
        #:jar-name "osgi-core.jar"))
     (inputs
      `(("java-osgi-annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Core module of OSGi framework")
     (description
      "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -3485,7 +3896,7 @@ the OSGi Core module.")
     (inputs
      `(("java-osgi-annotation" ,java-osgi-annotation)
        ("java-osgi-core" ,java-osgi-core)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGi service event module")
     (description
      "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -4101,6 +4512,68 @@ JavaMail API.")
 Java.")
     (license license:asl2.0)))
 
+(define-public java-log4j-core
+  (package
+    (inherit java-log4j-api)
+    (name "java-log4j-core")
+    (inputs
+     `(("java-osgi-core" ,java-osgi-core)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-log4j-api" ,java-log4j-api)
+       ("java-mail" ,java-mail)
+       ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec)
+       ("java-lmax-disruptor" ,java-lmax-disruptor)
+       ("java-kafka" ,java-kafka-clients)
+       ("java-datanucleus-javax-persistence" ,java-datanucleus-javax-persistence)
+       ("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-fasterxml-jackson-dataformat-xml" ,java-fasterxml-jackson-dataformat-xml)
+       ("java-fasterxml-jackson-dataformat-yaml" ,java-fasterxml-jackson-dataformat-yaml)
+       ("java-commons-compress" ,java-commons-compress)
+       ("java-commons-csv" ,java-commons-csv)
+       ("java-jeromq" ,java-jeromq)
+       ("java-junit" ,java-junit)))
+    (native-inputs
+     `(("hamcrest" ,java-hamcrest-all)
+       ("java-commons-io" ,java-commons-io)
+       ("java-commons-lang3" ,java-commons-lang3)
+       ("slf4j" ,java-slf4j-api)))
+    (arguments
+     `(#:tests? #f ; tests require more dependencies
+       #:test-dir "src/test"
+       #:source-dir "src/main/java"
+       #:jar-name "log4j-core.jar"
+       #:jdk ,icedtea-8
+       #:make-flags
+       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
+                            "/share/java"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-dir
+           (lambda _ (chdir "log4j-core") #t)))))
+    (synopsis "Core component of the Log4j framework")
+    (description "This package provides the core component of the Log4j
+logging framework for Java.")))
+
+(define-public java-log4j-1.2-api
+  (package
+    (inherit java-log4j-api)
+    (name "java-log4j-1.2-api")
+    (arguments
+     `(#:jar-name "java-log4j-1.2-api.jar"
+       #:source-dir "log4j-1.2-api/src/main/java"
+       #:jdk ,icedtea-8
+       ;; Tests require maven-model (and other maven subprojects), which is a
+       ;; cyclic dependency.
+       #:tests? #f))
+    (inputs
+     `(("log4j-api" ,java-log4j-api)
+       ("log4j-core" ,java-log4j-core)
+       ("osgi-core" ,java-osgi-core)
+       ("eclipse-osgi" ,java-eclipse-osgi)
+       ("java-lmax-disruptor" ,java-lmax-disruptor)))))
+
 (define-public java-commons-cli
   (package
     (name "java-commons-cli")
@@ -4629,55 +5102,60 @@ tree walking, and translation.")
                 "0qgg5vgsm4l1d6dj9pfbaa25dpv2ry2gny8ajy4vvgvfklw97b3m"))))
     (arguments
      `(#:jar-name (string-append ,name "-" ,version ".jar")
-       #:source-dir (string-append "tool/src/main/java:runtime/Java/src/main/java:"
-                                "tool/src/main/antlr2:tool/src/main/antlr3")
-       #:tests? #f
+       #:source-dir (string-join '("tool/src/main/java"
+                                   "runtime/Java/src/main/java"
+                                   "tool/src/main/antlr2"
+                                   "tool/src/main/antlr3")
+                                 ":")
+       #:tests? #f  ; FIXME: tests seem to require maven plugin
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'bin-install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((jar (string-append (assoc-ref outputs "out") "/share/java"))
-                   (bin (string-append (assoc-ref outputs "out") "/bin")))
+             (let* ((out (assoc-ref outputs "out"))
+                    (jar (string-append out "/share/java"))
+                    (bin (string-append out "/bin")))
                (mkdir-p bin)
                (with-output-to-file (string-append bin "/antlr3")
                  (lambda _
                    (display
-                     (string-append "#!" (which "sh") "\n"
-                                    "java -cp " jar "/antlr3-3.3.jar:"
-                                    (string-concatenate
-                                      (find-files (assoc-ref inputs "java-stringtemplate")
-                                                  ".*\\.jar"))
-                                    ":"
-                                    (string-concatenate
-                                      (find-files (string-append
-                                                    (assoc-ref inputs "antlr")
-                                                    "/lib")
-                                                  ".*\\.jar"))
-                                    " org.antlr.Tool $*"))))
-               (chmod (string-append bin "/antlr3") #o755))))
+                    (string-append
+                     "#!" (which "sh") "\n"
+                     "java -cp " jar "/antlr3-3.3.jar:"
+                     (string-join
+                      (append (find-files (assoc-ref inputs "java-stringtemplate")
+                                          ".*\\.jar$")
+                              (find-files (string-append (assoc-ref inputs "antlr")
+                                                         "/lib")
+                                          ".*\\.jar$"))
+                      ":")
+                     " org.antlr.Tool $*"))))
+               (chmod (string-append bin "/antlr3") #o755)
+               #t)))
          (add-before 'build 'generate-grammar
            (lambda _
-             (let ((dir "tool/src/main/antlr2/org/antlr/grammar/v2/"))
-               (for-each (lambda (file)
-                           (display file)
-                           (newline)
-                           (system* "antlr" "-o" dir (string-append dir file)))
-                         '("antlr.g" "antlr.print.g" "assign.types.g"
-                           "buildnfa.g" "codegen.g" "define.g")))
-             (chdir "tool/src/main/antlr3/org/antlr/grammar/v3/")
-             (for-each (lambda (file)
-                         (display file)
-                         (newline)
-                         (system* "antlr3" file))
-                       '("ActionAnalysis.g" "ActionTranslator.g" "ANTLRv3.g"
-                         "ANTLRv3Tree.g"))
-             (chdir "../../../../../../../..")
              (substitute* "tool/src/main/java/org/antlr/tool/Grammar.java"
                (("import org.antlr.grammar.v2.\\*;")
                 "import org.antlr.grammar.v2.*;\n
 import org.antlr.grammar.v2.TreeToNFAConverter;\n
 import org.antlr.grammar.v2.DefineGrammarItemsWalker;\n
-import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
+import org.antlr.grammar.v2.ANTLRTreePrinter;"))
+             (and
+              (with-directory-excursion "tool/src/main/antlr2/org/antlr/grammar/v2/"
+                (every (lambda (file)
+                         (format #t "~a\n" file)
+                         (zero? (system* "antlr" file)))
+                       '("antlr.g" "antlr.print.g" "assign.types.g"
+                         "buildnfa.g" "codegen.g" "define.g")))
+              (with-directory-excursion "tool/src/main/antlr3/org/antlr/grammar/v3/"
+                (every (lambda (file)
+                         (format #t "~a\n" file)
+                         (zero? (system* "antlr3" file)))
+                       '("ActionAnalysis.g" "ActionTranslator.g" "ANTLRv3.g"
+                         "ANTLRv3Tree.g"))))))
          (add-before 'build 'fix-build-xml
            (lambda _
              (substitute* "build.xml"
@@ -4688,7 +5166,8 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
 <include name=\"**/*.sti\"/>
 <include name=\"**/STLexer.tokens\"/>
 </fileset>
-</copy><exec")))))))
+</copy><exec"))
+             #t)))))
     (native-inputs
      `(("antlr" ,antlr2)
        ("antlr3" ,antlr3-3.1)))
@@ -4769,50 +5248,6 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
     (propagated-inputs
      `(("stringtemplate" ,java-stringtemplate-3)))))
 
-(define-public java-asm
-  (package
-    (name "java-asm")
-    (version "5.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://download.forge.ow2.org/asm/"
-                                  "asm-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0kxvmv5275rnjl7jv0442k3wjnq03ngkb7sghs78avf45pzm4qgr"))))
-    (build-system ant-build-system)
-    (arguments
-     `(#:build-target "compile"
-       #:test-target "test"
-       ;; The tests require an old version of Janino, which no longer compiles
-       ;; with the JDK7.
-       #:tests? #f
-       ;; We don't need these extra ant tasks, but the build system asks us to
-       ;; provide a path anyway.
-       #:make-flags (list (string-append "-Dobjectweb.ant.tasks.path=foo"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'install 'build-jars
-           (lambda* (#:key make-flags #:allow-other-keys)
-             ;; We cannot use the "jar" target because it depends on a couple
-             ;; of unpackaged, complicated tools.
-             (mkdir "dist")
-             (zero? (system* "jar"
-                             "-cf" (string-append "dist/asm-" ,version ".jar")
-                             "-C" "output/build/tmp" "."))))
-         (replace 'install
-           (install-jars "dist")))))
-    (native-inputs
-     `(("java-junit" ,java-junit)))
-    (home-page "http://asm.ow2.org/")
-    (synopsis "Very small and fast Java bytecode manipulation framework")
-    (description "ASM is an all purpose Java bytecode manipulation and
-analysis framework.  It can be used to modify existing classes or dynamically
-generate classes, directly in binary form.  The provided common
-transformations and analysis algorithms allow to easily assemble custom
-complex transformations and code analysis tools.")
-    (license license:bsd-3)))
-
 (define-public java-commons-cli-1.2
   ;; This is a bootstrap dependency for Maven2.
   (package
@@ -4915,7 +5350,7 @@ used to generate this API.")
        ("java-datanucleus-javax-persistence" ,java-datanucleus-javax-persistence)
        ("microemulator" ,java-microemulator-cldc)
        ("servlet" ,java-classpathx-servletapi)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Compendium specification module of OSGi framework")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -4943,7 +5378,7 @@ in compiling bundles.")
        #:tests? #f)); no tests
     (inputs
      `(("annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Support annotations for osgi-service-component")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -4969,7 +5404,7 @@ the support annotations for osgi-service-component.")
        #:tests? #f)); no tests
     (inputs
      `(("annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Data Transfer Objects")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5000,7 +5435,7 @@ objects of the listed types or aggregates.")
     (inputs
      `(("annotation" ,java-osgi-annotation)
        ("dto" ,java-osgi-dto)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGI Resource")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5028,7 +5463,7 @@ the definition of common types in osgi packages.")
     (arguments
      `(#:jar-name "osgi-namespace-contract.jar"
        #:tests? #f)); no tests
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Contract Capability and Requirement Namespace")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5056,7 +5491,7 @@ the names for the attributes and directives for a namespace with contracts.")
     (arguments
      `(#:jar-name "osgi-namespace-extendent.jar"
        #:tests? #f)); no tests
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Extender Capability and Requirement Namespace")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5084,7 +5519,7 @@ the names for the attributes and directives for an extender namespace.")
     (arguments
      `(#:jar-name "osgi-namespace-service.jar"
        #:tests? #f)); no tests
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Service Capability and Requirement Namespace")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5111,7 +5546,7 @@ the names for the attributes and directives for a service namespace.")
        #:tests? #f)); no tests
     (inputs
      `(("annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGI Util Function")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5139,7 +5574,7 @@ an interface for a function that accepts a single argument and produces a result
     (inputs
      `(("annotation" ,java-osgi-annotation)
        ("function" ,java-osgi-util-function)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Promise of a value")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5167,7 +5602,7 @@ value.  It handles the interactions for asynchronous processing.")
        #:tests? #f)); no tests
     (inputs
      `(("annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Support annotations for metatype")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5196,7 +5631,7 @@ the support annotations for metatype.")
      `(("annotation" ,java-osgi-annotation)
        ("promise" ,java-osgi-util-promise)
        ("resource" ,java-osgi-resource)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGI service repository")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5224,7 +5659,7 @@ a repository service that contains resources.")
      `(("annotation" ,java-osgi-annotation)
        ("resource" ,java-osgi-resource)
        ("dto" ,java-osgi-dto)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGi framework")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5250,7 +5685,7 @@ and service platform for the Java programming language.")
        #:tests? #f)); no tests
     (inputs
      `(("java-osgi-framework" ,java-osgi-framework)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Provides methods for bundles to write messages to the log")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5275,7 +5710,7 @@ the log service.")
     (arguments
      `(#:jar-name "osgi-service-jdbc.jar"
        #:tests? #f)); no tests
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Factory for JDBC connection factories")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5310,7 +5745,7 @@ factories for getting JDBC connections:
     (inputs
      `(("annotation" ,java-osgi-annotation)
        ("resource" ,java-osgi-resource)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGI Resolver service")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5339,7 +5774,7 @@ by the caller.")
     (inputs
      `(("framework" ,java-osgi-framework)
        ("annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "Bundle tracking")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5367,7 +5802,7 @@ bundle tracking utility classes.")
     (inputs
      `(("framework" ,java-osgi-framework)
        ("annotation" ,java-osgi-annotation)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGI Configuration Management")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5394,7 +5829,7 @@ utility classes for the configuration of services.")
        #:tests? #f)); no tests
     (inputs
      `(("framework" ,java-osgi-framework)))
-    (home-page "http://www.osgi.org")
+    (home-page "https://www.osgi.org")
     (synopsis "OSGI Package Administration")
     (description
       "OSGi, for Open Services Gateway initiative framework, is a module system
@@ -5748,7 +6183,7 @@ the system under test at the same time.")
 (define-public java-fasterxml-jackson-annotations
   (package
     (name "java-fasterxml-jackson-annotations")
-    (version "2.9.1")
+    (version "2.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/FasterXML/"
@@ -5756,7 +6191,7 @@ the system under test at the same time.")
                                   "jackson-annotations-" version ".tar.gz"))
               (sha256
                (base32
-                "005ksgqx2ds3zdmlvbcmmz82y28b1mx0i9bpvprim1jaddbba0bd"))))
+                "0b4wdxjxfbl3gkilylfdbl7fzimfpyih676jiwdf19i4056j8lqw"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jackson-annotations.jar"
@@ -5774,7 +6209,7 @@ not included are ones that require dependency to the Databind package.")
 (define-public java-fasterxml-jackson-core
   (package
     (name "java-fasterxml-jackson-core")
-    (version "2.9.1")
+    (version "2.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/FasterXML/"
@@ -5782,7 +6217,7 @@ not included are ones that require dependency to the Databind package.")
                                   "jackson-core-" version ".tar.gz"))
               (sha256
                (base32
-                "1sdfp74zvlh4xr5h5bj87yjlp6kny3i8ai9m0q3xs7f8hvmxpx09"))))
+                "0q2d6qnylyxj5jh0sam1b095b5486f7ipzhxgwcgbm254ls7fqc1"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jackson-core.jar"
@@ -5831,7 +6266,7 @@ not included are ones that require dependency to the Databind package.")
 (define-public java-fasterxml-jackson-databind
   (package
     (name "java-fasterxml-jackson-databind")
-    (version "2.9.1")
+    (version "2.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/FasterXML/"
@@ -5839,7 +6274,7 @@ not included are ones that require dependency to the Databind package.")
                                   "jackson-databind-" version ".tar.gz"))
               (sha256
                (base32
-                "02xrbj6g7pzybq8q33xmpf7cxfapk6z6lgxvig7d38fijz400lji"))))
+                "1d5ns8ypqhdy8d94i8q560ip9kka6q8lhnk6q7nfh2g9mr22cc4w"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jackson-databind.jar"
@@ -5874,7 +6309,7 @@ configuration.")
 (define-public java-fasterxml-jackson-modules-base-jaxb
   (package
     (name "java-fasterxml-jackson-modules-base-jaxb")
-    (version "2.9.1")
+    (version "2.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/FasterXML/"
@@ -5882,7 +6317,7 @@ configuration.")
                                   "jackson-modules-base-" version ".tar.gz"))
               (sha256
                (base32
-                "0bj2pzvycnj3ysbcfa6xl38dmvnp01mnjfcb9jyhv503fch2iv44"))))
+                "0kc19n5a188g4vpyay44xfb7qcabcbfnwzhx1g84lg0sac8lf0ng"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jackson-modules-base-jaxb.jar"
@@ -5944,7 +6379,7 @@ configuration.")
 (define-public java-fasterxml-jackson-dataformat-yaml
   (package
     (name "java-fasterxml-jackson-dataformat-yaml")
-    (version "2.9.1")
+    (version "2.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/FasterXML/"
@@ -5952,7 +6387,7 @@ configuration.")
                                   "jackson-dataformats-text-" version ".tar.gz"))
               (sha256
                (base32
-                "140fwcafv05zbh2ppa6z533dzmfcvzbdxf0dbpbyzqvd84v2vhl2"))))
+                "1x7c7v201jpb8ynjsmmq7jj7hyqzzp39jvpr053ggdndm022yzc7"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jackson-dataformat-yaml.jar"
@@ -6053,7 +6488,7 @@ interface and high-performance Typed Access API.")
 (define-public java-fasterxml-jackson-dataformat-xml
   (package
     (name "java-fasterxml-jackson-dataformat-xml")
-    (version "2.9.1")
+    (version "2.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/FasterXML/"
@@ -6061,7 +6496,7 @@ interface and high-performance Typed Access API.")
                                   "jackson-dataformat-xml-" version ".tar.gz"))
               (sha256
                (base32
-                "0x3m9n4kwclcyvxhxjx654qpjza4crphml1q2392qpnbfydx6lnh"))))
+                "1j1qanvcdh6afagr67zqrlypjkf0n6wr1qzpbvkw79lii72j6pbr"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "jackson-dataformat-xml.jar"
@@ -6146,6 +6581,62 @@ provides control over value quantization behavior across the value range and
 the subsequent value resolution at any given level.")
     (license license:public-domain)))
 
+(define-public java-cofoja
+  (package
+    (name "java-cofoja")
+    (version "1.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/nhatminhle/cofoja.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append "java-cofoja-" version "-checkout"))
+              (sha256
+               (base32
+                "0p7sz8y5xgpi5rx1qwn6587fkd52qr3ha3ybh14gqcyxhikl525w"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "dist"
+       #:test-target "test"
+       #:jdk ,icedtea-8
+       #:make-flags
+       (list "-Ddist.dir=dist")
+       #:modules ((guix build ant-build-system)
+                  (guix build java-utils)
+                  (guix build utils)
+                  (srfi srfi-1)
+                  (ice-9 match))
+       #:phases
+       (modify-phases %standard-phases
+         ;; The bulid system ignores the class path the ant-build-system sets
+         ;; up and instead expects to find all dependencies in the "lib"
+         ;; directory.
+         (add-after 'unpack 'create-libdir
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir-p "lib")
+             (for-each
+              (lambda (file)
+                (let ((target (string-append "lib/" (basename file))))
+                  (unless (file-exists? target)
+                    (symlink file target))))
+              (append-map (match-lambda
+                            ((label . dir)
+                             (find-files dir "\\.jar$")))
+                          inputs))
+             #t))
+         (replace 'install (install-jars "dist")))))
+    (inputs
+     `(("java-asm" ,java-asm)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "https://github.com/nhatminhle/cofoja")
+    (synopsis "Contracts for Java")
+    (description "Contracts for Java, or Cofoja for short, is a contract
+programming framework and test tool for Java, which uses annotation processing
+and bytecode instrumentation to provide run-time checking. (In particular,
+this is not a static analysis tool.)")
+    (license license:lgpl3+)))
+
 (define-public java-aopalliance
   (package
     (name "java-aopalliance")
@@ -6622,6 +7113,63 @@ In addition to the expression language, MVEL serves as a templating language for
 configuration and string construction.")
     (license license:asl2.0)))
 
+(define-public java-commons-jexl-2
+  (package
+    (name "java-commons-jexl")
+    (version "2.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/jexl/source/"
+                                  "commons-jexl-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1ai7632bwwaxglb0nbpblpr2jw5g20afrsaq372ipkphi3ncy1jz"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "commons-jexl-2.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "src/main/java"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'disable-broken-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "src/test/java/org/apache/commons/jexl2/"
+               (substitute* "ArithmeticTest.java"
+                 (("asserter.assertExpression\\(\"3 / 0\"") "//")
+                 (("asserter.assertExpression\\(\"imanull") "//"))
+               ;; This test fails with "ambiguous method invocation"
+               (delete-file "CacheTest.java")
+               ;; This test doesn't have access to the temp directory
+               (substitute* "ClassCreatorTest.java"
+                 (("java.io.tmpdir") "user.dir"))
+               ;; This test fails in trying to detect whether it can run.
+               (substitute* "ClassCreator.java"
+                 (("boolean canRun =.*") "boolean canRun = false;\n"))
+               ;; ...and these tests depend on it.
+               (delete-file "scripting/JexlScriptEngineOptionalTest.java")
+               (delete-file "scripting/JexlScriptEngineTest.java"))
+             #t))
+         (add-before 'build 'run-javacc
+           (lambda _
+             (with-directory-excursion "src/main/java/org/apache/commons/jexl2/parser/"
+               (and (zero? (system* "java" "jjtree" "Parser.jjt"))
+                    (zero? (system* "java" "javacc" "Parser.jj")))))))))
+    (inputs
+     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("javacc" ,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
+of dynamic and scripting features in applications and frameworks written in
+Java.  JEXL implements an Expression Language based on some extensions to the
+JSTL Expression Language supporting most of the constructs seen in
+shell-script or ECMAScript.  Its goal is to expose scripting features usable
+by technical operatives or consultants working with enterprise platforms.")
+    (license license:asl2.0)))
+
 (define-public java-lz4
   (package
     (name "java-lz4")
@@ -6753,6 +7301,41 @@ for high performance inter-thread communication that avoids the need for
 message queues or resource locking.")
     (license license:asl2.0)))
 
+(define-public java-commons-bcel
+  (package
+    (name "java-commons-bcel")
+    (version "6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/bcel/source/bcel-"
+                                  version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0j3x1rxd673k07psclk8k13rqh0x0mf2yy5qiwkiw4z3afa568jy"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "bcel.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "src/main/java"
+       #:test-dir "src/test/java"
+       ;; FIXME: Tests require the unpackaged jna.
+       #:tests? #f))
+    (home-page "https://commons.apache.org/proper/commons-bcel/")
+    (synopsis "Byte code engineering library")
+    (description "The Byte Code Engineering Library (Apache Commons BCEL) is
+intended to give users a convenient way to analyze, create, and
+manipulate (binary) Java class files.  Classes are represented by objects
+which contain all the symbolic information of the given class: methods, fields
+and byte code instructions, in particular.
+
+Such objects can be read from an existing file, be transformed by a
+program (e.g. a class loader at run-time) and written to a file again.  An
+even more interesting application is the creation of classes from scratch at
+run-time.  The @dfn{Byte Code Engineering Library} (BCEL) may be also useful
+if you want to learn about the @dfn{Java Virtual Machine} (JVM) and the format
+of Java @code{.class} files.")
+    (license license:asl2.0)))
+
 (define-public java-xerial-core
   (package
     (name "java-xerial-core")
@@ -6781,9 +7364,9 @@ message queues or resource locking.")
      `(("junit" ,java-junit)
        ("hamcrest" ,java-hamcrest-core)))
     (home-page "https://github.com/xerial/xerial-java")
-    (synopsis "Data managment libraries for Java")
+    (synopsis "Data management libraries for Java")
     (description "Xerial is a set of data management libraries for the Java
-programming language.  The ulitimate goal of the Xerial project is to manage
+programming language.  The ultimate goal of the Xerial project is to manage
 everything as database, including class objects, text format data, data
 streams, etc.")
     (license license:asl2.0)))
@@ -6835,7 +7418,13 @@ done to the IDE or continuous integration servers which simplifies adoption.")
        #:source-dir "powermock-core/src/main/java"
        #:test-dir "powermock-core/src/test"
        #:tests? #f; requires powermock-api
-       #:jdk ,icedtea-8))
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "powermock-core/src/main/resources"
+                               "build/classes"))))))
     (inputs
      `(("reflect" ,java-powermock-reflect)
        ("javassist" ,java-jboss-javassist)))
@@ -6874,3 +7463,379 @@ done to the IDE or continuous integration servers which simplifies adoption.")
        ("reflect" ,java-powermock-reflect)
        ("hamcrest" ,java-hamcrest-core)
        ("cglib" ,java-cglib)))))
+
+(define-public java-powermock-modules-junit4
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-modules-junit4")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-modules-junit4.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-modules/powermock-module-junit4/src/main/java"
+       #:test-dir "powermock-modules/powermock-module-junit4/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-junit-detection
+           (lambda _
+             ;; Our junit version is 4.12-SNAPSHOT
+             (substitute* (find-files "powermock-modules/powermock-module-junit4"
+                                      "PowerMockJUnit4MethodValidator.java")
+               (("4.12") "4.12-SNAPSHOT")))))))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("reflect" ,java-powermock-reflect)
+       ("common" ,java-powermock-modules-junit4-common)
+       ("cglib" ,java-cglib)))
+    (native-inputs
+     `(("easymock" ,java-easymock)
+       ("hamcrest" ,java-hamcrest-core)
+       ("objenesis" ,java-objenesis)
+       ("asm" ,java-asm)
+       ("junit" ,java-junit)))))
+
+(define-public java-powermock-api-easymock
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-api-easymock")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-api-easymock.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-api/powermock-api-easymock/src/main/java"
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-file
+           (lambda _
+             ;; FIXME: This looks wrong, but it fixes a build error.
+             (with-directory-excursion "powermock-api/powermock-api-easymock"
+               (substitute* "src/main/java/org/powermock/api/easymock/PowerMock.java"
+                 (("classLoader instanceof MockClassLoader") "false")
+                 (("\\(\\(MockClassLoader\\) classLoader\\).*;") ";")))
+             #t)))))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("easymock" ,java-easymock)
+       ("reflect" ,java-powermock-reflect)
+       ("support" ,java-powermock-api-support)
+       ("cglib" ,java-cglib)))))
+
+(define-public java-jboss-jms-api-spec
+  (package
+    (name "java-jboss-jms-api-spec")
+    (version "2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/jboss/jboss-jms-api_spec/"
+                                  "archive/jboss-jms-api_" version
+                                  "_spec-1.0.1.Final.tar.gz"))
+              (sha256
+               (base32
+                "07bqblw9kq2i8q92bz70fvavq5xjfkaixl8xa0m0cypjgy82rb7m"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-jboss-jms-api_spec.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "."
+       #:tests? #f)); no tests
+    (home-page "https://github.com/jboss/jboss-jms-api_spec")
+    (synopsis "Java Message Service API specification")
+    (description "Java Message Service (JMS) API is used to send messages
+messages between two or more clients.  It is a messaging standard that allows
+application components to create, send, receive, and read messages.")
+    ; either gpl2 only with GPL Classpath Exception, or cddl.
+    (license (list license:gpl2 license:cddl1.0))))
+
+(define-public java-mail
+  (package
+    (name "java-mail")
+    (version "1.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/javaee/javamail/archive/"
+                                  "JAVAMAIL-1_6_0.tar.gz"))
+              (sha256
+               (base32
+                "1b4rg7fpj50ld90a71iz2m4gm3f5cnw18p3q3rbrrryjip46kx92"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-mail.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "mail/src/main/java"
+       #:test-dir "mail/src/test"
+       #:test-exclude
+       (list "**/CollectorFormatterTest.java"
+             "**/CompactFormatterTest.java"
+             "**/DurationFilterTest.java"
+             "**/MailHandlerTest.java"
+             "**/GetLocalAddressTest.java"
+             ;; FIXME: both end with:
+             ;; java.lang.ClassNotFoundException:
+             ;; javax.mail.internet.MimeMultipartParseTest
+             "**/MimeMultipartParseTest.java"
+             "**/SearchTermSerializationTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'move-version.java
+           (lambda _
+             (copy-file "mail/src/main/resources/javax/mail/Version.java"
+                        "mail/src/main/java/javax/mail/Version.java")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "mail/src/main/resources/META-INF"
+                               "build/classes/META-INF")
+             #t)))))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://javaee.github.io/javamail/")
+    (synopsis "Mail-related functionnalities in Java")
+    (description "The JavaMail API provides a platform-independent and
+protocol-independent framework to build mail and messaging applications.")
+    ;; General Public License Version 2 only ("GPL") or the Common Development
+    ;; and Distribution License("CDDL")
+    (license (list license:cddl1.1
+                   license:gpl2)))); with classpath exception
+
+(define-public java-jeromq
+  (package
+    (name "java-jeromq")
+    (version "0.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/zeromq/jeromq/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "17wx8dlyqmbw77xf6d6wxnhiyky6181zpf1a48jqzz9hidz0j841"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-jeromq.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:test-exclude
+       (list
+         "**/Abstract*.java"
+         ;; Requires network
+         "**/ZBeaconTest.java"
+         ;; Failures
+         "**/CustomDecoderTest.java"
+         "**/CustomEncoderTest.java")))
+    (inputs
+     `(("java-jnacl" ,java-jnacl)))
+    (native-inputs
+     `(("java-hamcrest-core" ,java-hamcrest-core)
+       ("junit" ,java-junit)))
+    (home-page "http://zeromq.org/bindings:java")
+    (synopsis "Java binding for 0MQ")
+    (description "Jeromq provides the java bindings for 0MQ.")
+    (license license:mpl2.0)))
+
+(define-public java-kafka-clients
+  (package
+    (name "java-kafka-clients")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/kafka/" version "/kafka-"
+                                  version "-src.tgz"))
+              (sha256
+               (base32
+                "1yxmnsmliwm7671q5yy9bl4jdqyyn00n26cggz9brwczx80w1vfq"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-kafka-clients.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "clients/src/main/java"
+       #:test-dir "clients/src/test"
+       #:test-exclude
+       (list
+         ;; This file does not contain a class
+         "**/IntegrationTest.java"
+         ;; Requires network
+         "**/ClientUtilsTest.java"
+         ;; End with errors that seem related to our powermock
+         "**/KafkaProducerTest.java"
+         "**/BufferPoolTest.java")))
+    (inputs
+     `(("java-slf4j-api" ,java-slf4j-api)
+       ("java-lz4" ,java-lz4)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-all)
+       ("objenesis" ,java-objenesis)
+       ("asm" ,java-asm)
+       ("cglib" ,java-cglib)
+       ("javassist" ,java-jboss-javassist)
+       ("snappy" ,java-snappy)
+       ("easymock" ,java-easymock)
+       ("powermock" ,java-powermock-core)
+       ("powermock-easymock" ,java-powermock-api-easymock)
+       ("powermock-junit4-common" ,java-powermock-modules-junit4-common)
+       ("powermock-junit4" ,java-powermock-modules-junit4)
+       ("powermock-support" ,java-powermock-api-support)
+       ("bouncycastle" ,java-bouncycastle-bcprov)
+       ("bouncycastle-bcpkix" ,java-bouncycastle-bcpkix)))
+    (home-page "https://kafka.apache.org")
+    (synopsis "Distributed streaming platform")
+    (description "Kafka is a distributed streaming platform, which means:
+@itemize
+@item it can publish and subscribe to streams of records;
+@item it can store streams of records in a fault-tolerant way;
+@item it can process streams of records as they occur.
+@end itemize")
+    ;; Either cddl or gpl2 only.
+    (license (list license:cddl1.1; actually cddl1.1
+                   license:gpl2)))); with classpath exception
+
+(define-public java-jdom
+  (package
+    (name "java-jdom")
+    (version "1.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://jdom.org/dist/binary/archive/jdom-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "07wdpm3jwwc9q38kmdw40fvbmv6jzjrkrf8m0zqs58f79a672wfl"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "package"
+       #:tests? #f; tests are run as part of the build process
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (install-jars "build")))))
+    (home-page "http://jdom.org/")
+    (synopsis "Access, manipulate, and output XML data")
+    (description "Java-based solution for accessing, manipulating, and
+outputting XML data from Java code.")
+    (license license:bsd-4)))
+
+(define-public java-geronimo-xbean-reflect
+  (package
+    (name "java-geronimo-xbean-reflect")
+    (version "4.5")
+    (source (origin
+              (method svn-fetch)
+              (uri (svn-reference
+                     (url "https://svn.apache.org/repos/asf/geronimo/xbean/tags/xbean-4.5/")
+                     (revision 1807396)))
+              (file-name (string-append name "-" version))
+              (sha256
+               (base32
+                "18q3i6jgm6rkw8aysfgihgywrdc5nvijrwnslmi3ww497jvri6ja"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "geronimo-xbean-reflect.jar"
+       #:source-dir "xbean-reflect/src/main/java"
+       #:test-dir "xbean-reflect/src/test"
+       #:jdk ,icedtea-8
+       #:test-exclude
+       (list "**/Abstract*.java" "**/AsmParameterNameLoaderTest.java"
+             "**/ObjectRecipeTest.java" "**/ParameterNameLoaderTest.java"
+             "**/RecipeHelperTest.java" "**/XbeanAsmParameterNameLoaderTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-source
+           (lambda _
+             (let ((dir "xbean-reflect/src/main/java/org/apache/xbean/recipe/"))
+               ;; org.apache.xbean.asm6 is actually repackaged java-asm
+               (substitute* (string-append dir "XbeanAsmParameterNameLoader.java")
+                 (("org.apache.xbean.asm5") "org.objectweb.asm"))
+               #t))))))
+    (inputs
+     `(("asm" ,java-asm)
+       ("log4j" ,java-log4j-api)
+       ("log4j-1.2" ,java-log4j-1.2-api)
+       ("log4j-core" ,java-log4j-core)
+       ("logging" ,java-commons-logging-minimal)))
+    (native-inputs
+     `(("junit" ,java-junit)))
+    (home-page "https://geronimo.apache.org/maven/xbean/3.6/xbean-reflect/")
+    (synopsis "Dependency injection helper")
+    (description "Xbean-reflect provides very flexible ways to create objects
+and graphs of objects for dependency injection frameworks")
+    (license license:asl2.0)))
+
+(define-public java-geronimo-xbean-bundleutils
+  (package
+    (inherit java-geronimo-xbean-reflect)
+    (name "java-geronimo-xbean-bundleutils")
+    (arguments
+     `(#:jar-name "geronimo-xbean-bundleutils.jar"
+       #:source-dir "xbean-bundleutils/src/main/java"
+       #:test-dir "xbean-bundleutils/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-java
+           (lambda _
+             ;; We use a more recent version of osgi, so this file requires
+             ;; more interface method implementations.
+             (substitute* "xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/DelegatingBundleContext.java"
+               (("import org.osgi.framework.ServiceRegistration;")
+                "import org.osgi.framework.ServiceRegistration;
+import org.osgi.framework.ServiceFactory;
+import java.util.Collection;
+import org.osgi.framework.ServiceObjects;")
+               (("public Bundle getBundle\\(\\)")
+                "@Override
+public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> reference) {
+ throw new UnsupportedOperationException();
+}
+@Override
+public <S> ServiceRegistration<S> registerService(Class<S> clazz,
+        ServiceFactory<S> factory, Dictionary<String, ?> properties) {
+ throw new UnsupportedOperationException();
+}
+public Bundle getBundle()"))
+             #t)))))
+    (inputs
+     `(("java-slf4j" ,java-slf4j-api)
+       ("java-asm" ,java-asm)
+       ("java-osgi-framework" ,java-osgi-framework)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)
+       ("java-osgi-service-packageadmin" ,java-osgi-service-packageadmin)))))
+(define-public java-geronimo-xbean-asm-util
+  (package
+    (inherit java-geronimo-xbean-reflect)
+    (name "java-geronimo-xbean-asm-util")
+    (arguments
+     `(#:jar-name "geronimo-xbean-asm-util.jar"
+       #:source-dir "xbean-asm-util/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-asm" ,java-asm)))
+    (native-inputs '())))
+
+(define-public java-gson
+  (package
+    (name "java-gson")
+    (version "2.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/google/gson/archive/"
+                                  "gson-parent-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1j4qnp7v046q0k48c4kyf69sxaasx2h949d3cqwsm3kzxms3x0f9"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "gson.jar"
+       #:source-dir "gson/src/main/java"
+       #:test-dir "gson/src/test"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,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
+Objects into their JSON representation.  It can also be used to convert a JSON
+string to an equivalent Java object.  Gson can work with arbitrary Java objects
+including pre-existing objects that you do not have source-code of.")
+    (license license:asl2.0)))