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.scm1250
1 files changed, 1146 insertions, 104 deletions
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 13e261438d..e86c904e71 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -45,6 +45,7 @@
   #:use-module (gnu packages ghostscript) ;lcms
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux) ;alsa
   #:use-module (gnu packages wget)
@@ -340,12 +341,12 @@ build process and its dependencies, whereas Make uses Makefile format.")
     (license license:asl2.0)))
 
 (define-public icedtea-7
-  (let* ((version "2.6.9")
+  (let* ((version "2.6.10")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
                    (uri (string-append
-                         "http://icedtea.classpath.org/download/drops/"
+                         "http://icedtea.classpath.org/download/drops"
                          "/icedtea7/" version "/" name ".tar.bz2"))
                    (sha256 (base32 hash))))))
     (package
@@ -358,7 +359,7 @@ build process and its dependencies, whereas Make uses Makefile format.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "1slmajiakq7sk137vgqq9c93r5s620a46lw2jwbnzxhysjw3wkwf"))
+                  "0am945k2zqrka2xn7lb5grmkad4lwncnhnwk8iq6f269birzsj8w"))
                 (modules '((guix build utils)))
                 (snippet
                  '(substitute* "Makefile.in"
@@ -769,25 +770,25 @@ build process and its dependencies, whereas Make uses Makefile format.")
       (native-inputs
        `(("openjdk-src"
           ,(drop "openjdk"
-                 "08a4d1sg5m9l99lc7gafc7dmzmf4d8jvij5pffxv8rf6pk7psk24"))
+                 "02klsxp9hlf5sial6mxpiq53hmrhlrg6x774j7bjjfhb7hpdvadh"))
          ("corba-drop"
           ,(drop "corba"
-                 "12br49cfrqgvms0bnaij7fvnakvb6q8dlpqja64rg5q5r3x4gps8"))
+                 "1vbly6khri241xda05gnwkpf2fk41d96ls96ximi084mx0a3w5rd"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "07v2y3pll6z2wma94qilgffwyn2n4jna01mrhqwkb27whfpjfkmz"))
+                 "0s8zln64vdwdxwlw1vpfzm8xbpyhgsv3nqjmnv7y36qpsszg27a5"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "18rw64jjpq14v56d0q1xvz8knl0kf02rcday7fvlaxrbbj19km55"))
+                 "0myd66bv8ib8krzgqv754bc564rd8xwpwabvf7my1apyb86vap3n"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "1ig7xipi3vzm6cphy5fdraxi72p27xsg2qb51yqx9qwsmlrv1zj4"))
+                 "10b4lfv10vba07zblw0wii7mhrfhf32pf7410x5nz2q0smgszl2h"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "0sn9qv9nnhaan2smbhrv54lfhwsjhgd3b3h736p5d2hzpw8kicry"))
+                 "0lvncxb5qzrlqkflrnd0l8vwy155cwj1jb07rkq10z2vx0bq7lq2"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "16ijxy8br8dla339m4i90wr9xpf7s8z3nrhfyxm7jahr8injpzyl"))
+                 "0q6mdgbbd3681y3n0z1v783irdjhhi73z6sn5csczpyhjm318axb"))
          ("ant" ,ant)
          ("attr" ,attr)
          ("autoconf" ,autoconf)
@@ -839,16 +840,16 @@ IcedTea build harness.")
       (license license:gpl2+))))
 
 (define-public icedtea-8
-  (let* ((version "3.3.0")
+  (let* ((version "3.4.0")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
                    (uri (string-append
-                         "http://icedtea.classpath.org/download/drops/"
+                         "http://icedtea.classpath.org/download/drops"
                          "/icedtea8/" version "/" name ".tar.xz"))
                    (sha256 (base32 hash))))))
     (package (inherit icedtea-7)
-      (version "3.3.0")
+      (version "3.4.0")
       (source (origin
                 (method url-fetch)
                 (uri (string-append
@@ -856,7 +857,7 @@ IcedTea build harness.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "02vmxa6gc6gizcri1fy797qmmm9y77vgi7gy9pwkk4agcw4zyr5p"))
+                  "16if055973y6yw7n5gczp8iksvc31cy4p5by9lkbniadqj4z665m"))
                 (modules '((guix build utils)))
                 (snippet
                  '(begin
@@ -928,31 +929,34 @@ IcedTea build harness.")
        `(("jdk" ,icedtea-7 "jdk")
          ("openjdk-src"
           ,(drop "openjdk"
-                 "0889n19w6rvpzxgmmk9hlgzdh9ya95qkc2ajgpnzr3h69g15nz48"))
+                 "0va5i3zr8y8ncv914rz914jda9d88gq0viww3smdqnln8n78rszi"))
+         ("aarch32-drop"
+          ,(drop "aarch32"
+                 "0cway5a5hcfyh4pzl9zz5xr7lil4gsliy6r5iqbaasd2d9alvqiq"))
          ("corba-drop"
           ,(drop "corba"
-                 "0qcb72hhlsjgp6h9wd048qgyc88b7lfnxyc51xfyav0nhpfjnj8r"))
+                 "1l9zr97a3kq00bj4i8wcdsjlz3xlfldxd8zhkcxikinwd5n0n8a7"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "1vyc7dw10x5k45jmi348y8min6sg651ns12zzn30fjzhpfi36nds"))
+                 "0lqxrsr3xlpwm2na6f2rpl7znrz34dkb9dg3zjmympyjy4kqljn7"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "1dki6p39z1ms94cjvj5hd9q75q75g244c0xib82pma3q74jg6hx4"))
+                 "1b3chckk10dzrpa7cswmcf1jvryaiwkj8lihfqjr5j7l668jwr4h"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "17czby3nylcglp7l3d90a4pz1izc1sslifv8hrmynm9hn4m9d3k8"))
+                 "15lq0k2jv2x26x6vqkbljdcxk35i3b60pcsw3j1sdfmlk1xy6wgc"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "1h4azc21k58g9gn2y686wrvn9ahgac0ii7jhrrrmb5c1kjs0y2qv"))
+                 "17xkb8ahkg04ri0bp5wblcp1a2lp8j7c83ic5zdbggvgm339k5s8"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "12bfgwhrjfhgj6a2dsysdwhirg0jx88pi44y7s8a1bdan1mp03r8"))
+                 "0xpx8ykaq0ki6r0dl3dzca2xgp1p82z8mvsxcs2931ib667ncgcp"))
          ("nashorn-drop"
           ,(drop "nashorn"
-                 "0bg9r16jffc64fhyczn4jpx7bkfw7w62prw65mh66vshqk4lbh0f"))
+                 "1bnn4731lhlvg8axy4mjxgvh646yl22hp52wipx8cfca4vkn2f1z"))
          ("shenandoah-drop"
           ,(drop "shenandoah"
-                 "0abjlsvz669i06mlks28wnh11mm55y5613990pn5j7hfbw8a34q5"))
+                 "0fpxl8zlii1hpm777r875ys2cr5ih3gb6p1nm9jfa6krjrccrxv1"))
          ,@(fold alist-delete (package-native-inputs icedtea-7)
                  '("gcj" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
                    "jdk-drop" "langtools-drop" "hotspot-drop")))))))
@@ -1975,6 +1979,1010 @@ logging implementations.  A library that uses the commons-logging API can be
 used with any logging implementation at runtime.")
     (license license:asl2.0)))
 
+;; This is the last release of the 1.x series.
+(define-public java-mockito-1
+  (package
+    (name "java-mockito")
+    (version "1.10.19")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://repo1.maven.org/maven2/"
+                                  "org/mockito/mockito-core/" version
+                                  "/mockito-core-" version "-sources.jar"))
+              (sha256
+               (base32
+                "0vmiwnwpf83g2q7kj1rislmja8fpvqkixjhawh7nxnygx6pq11kc"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "mockito.jar"
+       #:tests? #f ; no tests included
+       ;; FIXME: patch-and-repack does not support jars, so we have to apply
+       ;; patches in build phases.
+       #:phases
+       (modify-phases %standard-phases
+         ;; Mockito was developed against a different version of hamcrest,
+         ;; which does not require matcher implementations to provide an
+         ;; implementation of the "describeMismatch" method.  We add this
+         ;; simple definition to pass the build with our version of hamcrest.
+         (add-after 'unpack 'fix-hamcrest-build-error
+           (lambda _
+             (substitute* "src/org/mockito/internal/matchers/LocalizedMatcher.java"
+               (("public Matcher getActualMatcher\\(\\) .*" line)
+                (string-append "
+    public void describeMismatch(Object item, Description description) {
+        actualMatcher.describeMismatch(item, description);
+    }"
+                               line)))
+             #t))
+         ;; Mockito bundles cglib.  We have a cglib package, so let's use
+         ;; that instead.
+         (add-after 'unpack 'use-system-libraries
+           (lambda _
+             (with-directory-excursion "src/org/mockito/internal/creation/cglib"
+               (substitute* '("CGLIBHacker.java"
+                              "CglibMockMaker.java"
+                              "ClassImposterizer.java"
+                              "DelegatingMockitoMethodProxy.java"
+                              "MethodInterceptorFilter.java"
+                              "MockitoNamingPolicy.java"
+                              "SerializableMockitoMethodProxy.java"
+                              "SerializableNoOp.java")
+                 (("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)))
+    (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
+tests with a clean and simple API.  It generates mocks using reflection, and
+it records all mock invocations, including methods arguments.")
+    (license license:asl2.0)))
+
+(define-public java-httpcomponents-httpcore
+  (package
+    (name "java-httpcomponents-httpcore")
+    (version "4.4.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache//httpcomponents/httpcore/"
+                                  "source/httpcomponents-core-"
+                                  version "-src.tar.gz"))
+              (sha256
+               (base32
+                "02bwcf38y4vgwq7kj2s6q7qrmma641r5lacivm16kgxvb2j6h1vy"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "httpcomponents-httpcore.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "httpcore") #t)))))
+    (inputs
+     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ("java-commons-lang3" ,java-commons-lang3)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-mockito" ,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
+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
+on the classic Java I/O and non-blocking, event driven I/O model based on Java
+NIO.
+
+This package provides the blocking I/O model library.")
+    (license license:asl2.0)))
+
+(define-public java-httpcomponents-httpcore-nio
+  (package (inherit java-httpcomponents-httpcore)
+    (name "java-httpcomponents-httpcore-nio")
+    (arguments
+     `(#:jar-name "httpcomponents-httpcore-nio.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (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)))
+    (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
+on the classic Java I/O and non-blocking, event driven I/O model based on Java
+NIO.
+
+This package provides the non-blocking I/O model library based on Java
+NIO.")))
+
+(define-public java-httpcomponents-httpcore-ab
+  (package (inherit java-httpcomponents-httpcore)
+    (name "java-httpcomponents-httpcore-ab")
+    (arguments
+     `(#:jar-name "httpcomponents-httpcore-ab.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (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)))
+    (synopsis "Apache HttpCore benchmarking tool")
+    (description "This package provides the HttpCore benchmarking tool.  It is
+an Apache AB clone based on HttpCore.")))
+
+(define-public java-httpcomponents-httpclient
+  (package
+    (name "java-httpcomponents-httpclient")
+    (version "4.5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/httpcomponents/httpclient/"
+                                  "source/httpcomponents-client-"
+                                  version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1428399s7qy3cim5wc6f3ks4gl9nf9vkjpfmnlap3jflif7g2pj1"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "httpcomponents-httpclient.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (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)))
+    (home-page "https://hc.apache.org/httpcomponents-client-ga/")
+    (synopsis "HTTP client library for Java")
+    (description "Although the @code{java.net} package provides basic
+functionality for accessing resources via HTTP, it doesn't provide the full
+flexibility or functionality needed by many applications.  @code{HttpClient}
+seeks to fill this void by providing an efficient, up-to-date, and
+feature-rich package implementing the client side of the most recent HTTP
+standards and recommendations.")
+    (license license:asl2.0)))
+
+(define-public java-httpcomponents-httpmime
+  (package (inherit java-httpcomponents-httpclient)
+    (name "java-httpcomponents-httpmime")
+    (arguments
+     `(#:jar-name "httpcomponents-httpmime.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (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)))))
+
+(define-public java-commons-net
+  (package
+    (name "java-commons-net")
+    (version "3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/net/source/"
+                                  "commons-net-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr"))))
+    (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.")
+    (license license:asl2.0)))
+
+(define-public java-jsch
+  (package
+    (name "java-jsch")
+    (version "0.1.54")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/jsch/jsch/"
+                                  version "/jsch-" version ".zip"))
+              (sha256
+               (base32
+                "029rdddyq1mh3ghryh3ki99kba1xkf1d1swjv2vi6lk6zzjy2wdb"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "dist"
+       #:tests? #f ; no tests included
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install (install-jars "dist")))))
+    (native-inputs
+     `(("unzip" ,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
+to connect to an SSH server and use port forwarding, X11 forwarding, file
+transfer, etc., and you can integrate its functionality into your own Java
+programs.")
+    (license license:bsd-3)))
+
+(define-public java-commons-compress
+  (package
+    (name "java-commons-compress")
+    (version "1.13")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/compress/source/"
+                                  "commons-compress-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1vjqvavrn0babffn1kciz6v52ibwq2vwhzlb95hazis3lgllnxc8"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "commons-compress.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-bad-tests
+           (lambda _
+             (with-directory-excursion "src/test/java/org/apache/commons/compress/"
+               ;; FIXME: These tests really should not fail.  Maybe they are
+               ;; indicative of problems with our Java packaging work.
+
+               ;; This test fails with a null pointer exception.
+               (delete-file "archivers/sevenz/SevenZOutputFileTest.java")
+               ;; This test fails to open test resources.
+               (delete-file "archivers/zip/ExplodeSupportTest.java")
+
+               ;; FIXME: This test adds a dependency on powermock, which is hard to
+               ;; package at this point.
+               ;; https://github.com/powermock/powermock
+               (delete-file "archivers/sevenz/SevenZNativeHeapTest.java"))
+             #t)))))
+    (inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-mockito" ,java-mockito-1)
+       ("java-xz" ,java-xz)))
+    (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
+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
+  (package
+    (name "java-commons-net")
+    (version "3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/net/source/"
+                                  "commons-net-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr"))))
+    (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.")
+    (license license:asl2.0)))
+
+(define-public java-osgi-annotation
+  (package
+    (name "java-osgi-annotation")
+    (version "6.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/osgi/org.osgi.annotation/" version "/"
+                                  "org.osgi.annotation-" version "-sources.jar"))
+              (sha256
+               (base32
+                "1q718mb7gqg726rh6pc2hcisn8v50nv35abbir0jypmffhiii85w"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "osgi-annotation.jar"))
+    (home-page "http://www.osgi.org")
+    (synopsis "Annotation module of OSGi framework")
+    (description
+     "OSGi, for Open Services Gateway initiative framework, is a module system
+and service platform for the Java programming language.  This package contains
+the OSGi annotation module, providing additional services to help dynamic
+components.")
+    (license license:asl2.0)))
+
+(define-public java-osgi-core
+  (package
+    (name "java-osgi-core")
+    (version "6.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/osgi/org.osgi.core/" version "/"
+                                  "org.osgi.core-" version "-sources.jar"))
+              (sha256
+               (base32
+                "19bpf5jx32jq9789gyhin35q5v7flmw0p9mk7wbgqpxqfmxyiabv"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "osgi-core.jar"))
+    (inputs
+     `(("java-osgi-annotation" ,java-osgi-annotation)))
+    (home-page "http://www.osgi.org")
+    (synopsis "Core module of OSGi framework")
+    (description
+     "OSGi, for Open Services Gateway initiative framework, is a module system
+and service platform for the Java programming language.  This package contains
+the OSGi Core module.")
+    (license license:asl2.0)))
+
+(define-public java-osgi-service-event
+  (package
+    (name "java-osgi-service-event")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/osgi/org.osgi.service.event/"
+                                  version "/org.osgi.service.event-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1nyhlgagwym75bycnjczwbnpymv2iw84zbhvvzk84g9q736i6qxm"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "osgi-service-event.jar"))
+    (inputs
+     `(("java-osgi-annotation" ,java-osgi-annotation)
+       ("java-osgi-core" ,java-osgi-core)))
+    (home-page "http://www.osgi.org")
+    (synopsis "OSGi service event module")
+    (description
+     "OSGi, for Open Services Gateway initiative framework, is a module system
+and service platform for the Java programming language.  This package contains
+the OSGi @code{org.osgi.service.event} module.")
+    (license license:asl2.0)))
+
+(define-public java-eclipse-osgi
+  (package
+    (name "java-eclipse-osgi")
+    (version "3.11.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.osgi/"
+                                  version "/org.eclipse.osgi-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "00cqc6lb29n0zv68b4l842vzkwawvbr7gshfdygsk8sicvcq2c7b"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-osgi.jar"))
+    (inputs
+     `(("java-osgi-annotation" ,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
+specification.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-common
+  (package
+    (name "java-eclipse-equinox-common")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.common/"
+                                  version "/org.eclipse.equinox.common-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "12aazpkgw46r1qj0pr421jzwhbmsizd97r37krd7njnbrdgfzksc"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-common.jar"))
+    (inputs
+     `(("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Common Eclipse runtime")
+    (description "This package provides the common Eclipse runtime.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-jobs
+  (package
+    (name "java-eclipse-core-jobs")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.jobs/"
+                                  version "/org.eclipse.core.jobs-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0395b8lh0km8vhzjnchvs1rii1qz48hyvb2wqfaq4yhklbwihq4b"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse jobs mechanism")
+    (description "This package provides the Eclipse jobs mechanism.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-registry
+  (package
+    (name "java-eclipse-equinox-registry")
+    (version "3.6.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.registry/"
+                                  version "/org.eclipse.equinox.registry-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1i9sgymh2fy5vdgk5y7s3qvrlbgh4l93ddqi3v4zmca7hwrlhf9k"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse extension registry support")
+    (description "This package provides support for the Eclipse extension
+registry.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-app
+  (package
+    (name "java-eclipse-equinox-app")
+    (version "1.3.400")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.app/"
+                                  version "/org.eclipse.equinox.app-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0nhvbp93y203ar7y59gb0mz3w2d3jlqhr0c9hii9bcfpmr7imdab"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Equinox application container")
+    (description "This package provides the Equinox application container for
+Eclipse.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-preferences
+  (package
+    (name "java-eclipse-equinox-preferences")
+    (version "3.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.preferences/"
+                                  version "/org.eclipse.equinox.preferences-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0k7w6c141sqym4fy3af0qkwpy4pdh2vsjpjba6rp5fxyqa24v0a2"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse preferences mechanism")
+    (description "This package provides the Eclipse preferences mechanism with
+the module @code{org.eclipse.equinox.preferences}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-contenttype
+  (package
+    (name "java-eclipse-core-contenttype")
+    (version "3.5.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.contenttype/"
+                                  version "/org.eclipse.core.contenttype-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1wcqcv7ijwv5rh748vz3x9pkmjl9w1r0k0026k56n8yjl4rrmspi"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "http://www.eclipse.org/")
+    (synopsis "Eclipse content mechanism")
+    (description "This package provides the Eclipse content mechanism in the
+@code{org.eclipse.core.contenttype} module.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-runtime
+  (package
+    (name "java-eclipse-core-runtime")
+    (version "3.12.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.runtime/"
+                                  version "/org.eclipse.core.runtime-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "16mkf8jgj35pgzms7w1gyfq0gfm4ixw6c5xbbxzdj1la56c758ya"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core runtime")
+    (description "This package provides the Eclipse core runtime with the
+module @code{org.eclipse.core.runtime}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-filesystem
+  (package
+    (name "java-eclipse-core-filesystem")
+    (version "1.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.filesystem/"
+                                  version "/org.eclipse.core.filesystem-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0km1bhwjim4rfy3pkvjhvy31kgsyf2ncx0mlkmbf5n6g57pphdyj"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core file system")
+    (description "This package provides the Eclipse core file system with the
+module @code{org.eclipse.core.filesystem}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-expressions
+  (package
+    (name "java-eclipse-core-expressions")
+    (version "3.5.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.expressions/"
+                                  version "/org.eclipse.core.expressions-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "18bw2l875gmygvpagpgk9l24qzbdjia4ag12nw6fi8v8yaq4987f"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core expression language")
+    (description "This package provides the Eclipse core expression language
+with the @code{org.eclipse.core.expressions} module.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-variables
+  (package
+    (name "java-eclipse-core-variables")
+    (version "3.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.variables/"
+                                  version "/org.eclipse.core.variables-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "12dirh03zi4n5x5cj07vzrhkmnqy6h9q10h9j605pagmpmifyxmy"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Eclipse core variables")
+    (description "This package provides the Eclipse core variables module
+@code{org.eclipse.core.variables}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-ant-core
+  (package
+    (name "java-eclipse-ant-core")
+    (version "3.4.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.ant.core/"
+                                  version "/org.eclipse.ant.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "11g3if794qjlk98mz9zch22rr56sd7z63vn4i7k2icr8cq5bfqg7"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Ant build tool core libraries")
+    (description "This package provides the ant build tool core libraries with
+the module @code{org.eclipse.ant.core}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-resources
+  (package
+    (name "java-eclipse-core-resources")
+    (version "3.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.resources/"
+                                  version "/org.eclipse.core.resources-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1hrfxrll6cpcagfksk2na1ypvkcnsp0fk6n3vcsrn97qayf9mx9l"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core resource management")
+    (description "This package provides the Eclipse core resource management
+module @code{org.eclipse.core.resources}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-compare-core
+  (package
+    (name "java-eclipse-compare-core")
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.compare.core/"
+                                  version "/org.eclipse.compare.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "10g37r0pbiffyv2wk35c6g5lwzkdipkl0kkjp41v84dln46xm4dg"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core compare support")
+    (description "This package provides the Eclipse core compare support
+module @code{org.eclipse.compare.core}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-team-core
+  (package
+    (name "java-eclipse-team-core")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.team.core/"
+                                  version "/org.eclipse.team.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "02j2jzqgb26zx2d5ahxmvijw6j4r0la90zl5c3i65x6z19ciyam7"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#: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)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Eclipse team support core")
+    (description "This package provides the Eclipse team support core module
+@code{org.eclipse.team.core}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-commands
+  (package
+    (name "java-eclipse-core-commands")
+    (version "3.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.commands/"
+                                  version "/org.eclipse.core.commands-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0yjn482qndcfrsq3jd6vnhcylp16420f5aqkrwr8spsprjigjcr9"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-commands.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,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
+@code{org.eclipse.core.commands}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-text
+  (package
+    (name "java-eclipse-text")
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.text/"
+                                  version "/org.eclipse.text-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0scz70vzz5qs5caji9f5q01vkqnvip7dpri1q07l8wbbdcxn4cq1"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-text.jar"
+       #:phases
+       (modify-phases %standard-phases
+         ;; When creating a new category we must make sure that the new list
+         ;; matches List<Position>.  By default it seems to be too generic
+         ;; (ArrayList<Object>), so we specialize it to ArrayList<Position>.
+         ;; Without this we get this error:
+         ;;
+         ;; [javac] .../src/org/eclipse/jface/text/AbstractDocument.java:376:
+         ;;      error: method put in interface Map<K,V> cannot be applied to given types;
+         ;; [javac] 			fPositions.put(category, new ArrayList<>());
+         ;; [javac] 			          ^
+         ;; [javac]   required: String,List<Position>
+         ;; [javac]   found: String,ArrayList<Object>
+         ;; [javac]   reason: actual argument ArrayList<Object> cannot be converted
+         ;;              to List<Position> by method invocation conversion
+         ;; [javac]   where K,V are type-variables:
+         ;; [javac]     K extends Object declared in interface Map
+         ;; [javac]     V extends Object declared in interface Map
+         ;;
+         ;; I don't know if this is a good fix.  I suspect it is not, but it
+         ;; seems to work.
+         (add-after 'unpack 'fix-compilation-error
+           (lambda _
+             (substitute* "src/org/eclipse/jface/text/AbstractDocument.java"
+               (("Positions.put\\(category, new ArrayList<>\\(\\)\\);")
+                "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)))
+    (home-page "http://www.eclipse.org/platform")
+    (synopsis "Eclipse text library")
+    (description "Platform Text is part of the Platform UI project and
+provides the basic building blocks for text and text editors within Eclipse
+and contributes the Eclipse default text editor.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-jdt-core
+  (package
+    (name "java-eclipse-jdt-core")
+    (version "3.12.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/jdt/org.eclipse.jdt.core/"
+                                  version "/org.eclipse.jdt.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "191xw4lc7mjjkprh4ji5vnpjvr5r4zvbpwkriy4bvsjqrz35vh1j"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-jdt-core.jar"))
+    (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)))
+    (home-page "https://www.eclipse.org/jdt")
+    (synopsis "Java development tools core libraries")
+    (description "This package provides the core libraries of the Eclipse Java
+development tools.")
+    (license license:epl1.0)))
+
+(define-public java-javax-mail
+  (package
+    (name "java-javax-mail")
+    (version "1.5.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "com/sun/mail/javax.mail/"
+                                  version "/javax.mail-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0sdlfgsc2b5s89xv1261y8i0jijcja019k2x1c8ngfn582w4jly9"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "javax-mail.jar"))
+    (home-page "https://javamail.java.net")
+    (synopsis "Reference implementation of the JavaMail API")
+    (description
+     "This package provides versions of the JavaMail API implementation, IMAP,
+SMTP, and POP3 service providers, some examples, and documentation for the
+JavaMail API.")
+    ;; GPLv2 only with "classpath exception".
+    (license license:gpl2)))
+
+(define-public java-log4j-api
+  (package
+    (name "java-log4j-api")
+    (version "2.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/logging/log4j/" version
+                                  "/apache-log4j-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0j5p9gik0jysh37nlrckqbky12isy95cpwg2gv5fas1rcdqbraxd"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; tests require unpackaged software
+       #:jar-name "log4j-api.jar"
+       #: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-api") #t))
+         ;; FIXME: The tests require additional software that has not been
+         ;; packaged yet, such as
+         ;; * org.apache.maven
+         ;; * org.apache.felix
+         (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)))
+    (home-page "http://logging.apache.org/log4j/2.x/")
+    (synopsis "API module of the Log4j logging framework for Java")
+    (description
+     "This package provides the API module of the Log4j logging framework for
+Java.")
+    (license license:asl2.0)))
+
 (define-public java-commons-cli
   (package
     (name "java-commons-cli")
@@ -2105,49 +3113,30 @@ This is a part of the Apache Commons Project.")
                   (substitute* "lib/cpp/antlr/CharScanner.hpp"
                     (("#include <map>")
                      (string-append
-                       "#include <map>\n"
-                       "#define EOF (-1)\n"
-                       "#include <strings.h>")))
+                      "#include <map>\n"
+                      "#define EOF (-1)\n"
+                      "#include <strings.h>")))
                   (substitute* "configure"
-                    (("/bin/sh") "sh"))))))
+                    (("/bin/sh") "sh"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f
+     `(#:tests? #f ; no test target
+       #:imported-modules ((guix build ant-build-system)
+                           (guix build syscalls)
+                           ,@%gnu-build-system-modules)
+       #:modules (((guix build ant-build-system) #:prefix ant:)
+                  (guix build gnu-build-system)
+                  (guix build utils))
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'strip-jar-timestamps
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (jar1 (string-append out "/lib/antlr.jar"))
-                    (jar2 (string-append out "/share/antlr-2.7.7/antlr.jar")))
-               ;; XXX: copied from (guix build ant-build-system)
-               (define (strip-jar jar dir)
-                 (let ((manifest (string-append dir "/META-INF/MANIFEST.MF")))
-                   (mkdir-p dir)
-                   (and (with-directory-excursion dir
-                          (zero? (system* "jar" "xf" jar)))
-                        (delete-file jar)
-                        (for-each (lambda (file)
-                                    (let ((s (lstat file)))
-                                      (unless (eq? (stat:type s) 'symlink)
-                                                 (utime file 0 0 0 0))))
-                                  (find-files dir #:directories? #t))
-                        (with-directory-excursion dir
-                          (let* ((files (find-files "." ".*" #:directories? #t)))
-                            (unless (zero? (apply system*
-                                                  `("zip" "-X" ,jar ,manifest
-                                                    ,@files)))
-                              (error "'zip' failed"))))
-                        (utime jar 0 0)
-                        #t)))
-                (strip-jar jar1 "temp1")
-                (strip-jar jar2 "temp2"))))
+           (assoc-ref ant:%standard-phases 'strip-jar-timestamps))
          (add-after 'configure 'fix-bin-ls
            (lambda _
-             (for-each (lambda (file)
-                         (substitute* file
-                          (("/bin/ls") "ls")))
-               (find-files "." "Makefile")))))))
+             (substitute* (find-files "." "Makefile")
+               (("/bin/ls") "ls"))
+             #t)))))
     (native-inputs
      `(("which" ,which)
        ("zip" ,zip)
@@ -2163,9 +3152,9 @@ C++, or Python actions.  ANTLR provides excellent support for tree construction,
 tree walking, and translation.")
     (license license:public-domain)))
 
-(define-public stringtemplate3
+(define-public java-stringtemplate-3
   (package
-    (name "stringtemplate3")
+    (name "java-stringtemplate")
     (version "3.2.1")
     (source (origin
               (method url-fetch)
@@ -2177,21 +3166,30 @@ tree walking, and translation.")
                 "086yj68np1vqhkj7483diz3km6s6y4gmwqswa7524a0ca6vxn2is"))))
     (build-system ant-build-system)
     (arguments
-     `(#:jar-name "stringtemplate-3.2.1.jar"
-       #:tests? #f
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:test-dir "test"
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
+         (add-before 'check 'fix-tests
+           (lambda _
+             (substitute* "build.xml"
+               (("\\$\\{test.home\\}/java")
+                "${test.home}/org"))
+             #t))
          (add-before 'build 'generate-grammar
            (lambda _
-             (let ((dir "src/org/antlr/stringtemplate/language/"))
-               (for-each (lambda (file)
-                           (display file)
-                           (newline)
-                           (system* "antlr" "-o" dir (string-append dir file)))
-                         '("template.g" "angle.bracket.template.g" "action.g"
-                           "eval.g" "group.g" "interface.g"))))))))
+             (with-directory-excursion "src/org/antlr/stringtemplate/language/"
+               (every (lambda (file)
+                        (format #t "~a\n" file)
+                        (zero? (system* "antlr" file)))
+                      '("template.g" "angle.bracket.template.g" "action.g"
+                        "eval.g" "group.g" "interface.g"))))))))
     (native-inputs
-     `(("antlr" ,antlr2)))
+     `(("antlr" ,antlr2)
+       ("java-junit" ,java-junit)))
     (home-page "http://www.stringtemplate.org")
     (synopsis "Template engine to generate formatted text output")
     (description "StringTemplate is a java template engine (with ports for C#,
@@ -2215,9 +3213,9 @@ StringTemplate also powers ANTLR.")
 ;; only grammar files with the antlr2 syntax.
 ;; So we build antlr3.1 -> antlr3.3 -> ST4.0.6 -> antlr3-bootstrap -> ST4 -> antlr3.
 
-(define-public stringtemplate4
-  (package
-    (name "stringtemplate4")
+(define-public java-stringtemplate
+  (package (inherit java-stringtemplate-3)
+    (name "java-stringtemplate")
     (version "4.0.8")
     (source (origin
               (method url-fetch)
@@ -2229,36 +3227,36 @@ StringTemplate also powers ANTLR.")
                 "1pri8hqa95rfdkjy55icl5q1m09zwp5k67ib14abas39s4v3w087"))))
     (build-system ant-build-system)
     (arguments
-     `(#:tests? #f
-       #:jar-name (string-append ,name "-" ,version ".jar")
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:tests? #f ; FIXME: tests fail for unknown reasons
+       #:test-dir "test"
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
+         (add-before 'check 'fix-test-target
+           (lambda _
+             (substitute* "build.xml"
+               (("\\$\\{test.home\\}/java") "${test.home}/")
+               (("\\*Test.java") "Test*.java"))
+             #t))
          (add-before 'build 'generate-grammar
-           (lambda* (#:key inputs #:allow-other-keys)
-             (chdir "src/org/stringtemplate/v4/compiler/")
-             (for-each (lambda (file)
-                         (display file)
-                         (newline)
-                         (system* "antlr3" file))
-                       '("STParser.g" "Group.g" "CodeGenerator.g"))
-             (chdir "../../../../.."))))))
+           (lambda _
+             (with-directory-excursion "src/org/stringtemplate/v4/compiler/"
+               (every (lambda (file)
+                        (format #t "~a\n" file)
+                        (zero? (system* "antlr3" file)))
+                      '("STParser.g" "Group.g" "CodeGenerator.g"))))))))
     (inputs
      `(("antlr3" ,antlr3-bootstrap)
        ("antlr2" ,antlr2)
-       ("stringtemplate" ,stringtemplate3)))
-    (home-page "http://www.stringtemplate.org")
-    (synopsis "Template engine to generate formatted text output")
-    (description "StringTemplate is a java template engine (with ports for C#,
-Objective-C, JavaScript, Scala) for generating source code, web pages, emails,
-or any other formatted text output.  StringTemplate is particularly good at
-code generators, multiple site skins, and internationalization / localization.
-StringTemplate also powers ANTLR.")
-    (license license:bsd-3)))
+       ("java-stringtemplate" ,java-stringtemplate-3)
+       ("java-junit" ,java-junit)))))
 
-(define stringtemplate4-4.0.6
-  (package
-    (inherit stringtemplate4)
-    (name "stringtemplate4")
+(define java-stringtemplate-4.0.6
+  (package (inherit java-stringtemplate)
+    (name "java-stringtemplate")
     (version "4.0.6")
     (source (origin
               (method url-fetch)
@@ -2271,7 +3269,7 @@ StringTemplate also powers ANTLR.")
     (inputs
      `(("antlr3" ,antlr3-3.3)
        ("antlr2" ,antlr2)
-       ("stringtemplate" ,stringtemplate3)))))
+       ("java-stringtemplate" ,java-stringtemplate-3)))))
 
 (define-public antlr3
   (package
@@ -2358,12 +3356,12 @@ import org.antlr.grammar.v3.ANTLRTreePrinter;"))
        ("antlr3" ,antlr3-bootstrap)))
     (inputs
      `(("junit" ,java-junit)
-       ("stringtemplate" ,stringtemplate3)
-       ("stringtemplate4" ,stringtemplate4)))
+       ("stringtemplate" ,java-stringtemplate-3)
+       ("stringtemplate4" ,java-stringtemplate)))
     (propagated-inputs
-     `(("stringtemplate" ,stringtemplate3)
+     `(("stringtemplate" ,java-stringtemplate-3)
        ("antlr" ,antlr2)
-       ("stringtemplate4" ,stringtemplate4-4.0.6)))
+       ("stringtemplate4" ,java-stringtemplate-4.0.6)))
     (home-page "http://www.antlr3.org")
     (synopsis "Framework for constructing recognizers, compilers, and translators")
     (description "ANTLR, ANother Tool for Language Recognition, (formerly PCCTS)
@@ -2414,7 +3412,7 @@ tree walking, and translation.")
                      (string-append "#!" (which "sh") "\n"
                                     "java -cp " jar "/antlr3-3.3.jar:"
                                     (string-concatenate
-                                      (find-files (assoc-ref inputs "stringtemplate")
+                                      (find-files (assoc-ref inputs "java-stringtemplate")
                                                   ".*\\.jar"))
                                     ":"
                                     (string-concatenate
@@ -2464,7 +3462,7 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
     (inputs
      `(("junit" ,java-junit)))
     (propagated-inputs
-     `(("stringtemplate" ,stringtemplate3)
+     `(("java-stringtemplate" ,java-stringtemplate-3)
        ("antlr" ,antlr2)
        ("antlr3" ,antlr3-3.1)))))
 
@@ -2536,4 +3534,48 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
     (inputs
      `(("junit" ,java-junit)))
     (propagated-inputs
-     `(("stringtemplate" ,stringtemplate3)))))
+     `(("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)))