Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / java.scm
index 0f0144b..829cbf9 100644 (file)
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2017, 2018 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>
@@ -53,6 +53,7 @@
   #:use-module (gnu packages gnuzilla) ;nss
   #:use-module (gnu packages ghostscript) ;lcms
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages groovy)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages icu4c)
@@ -60,6 +61,7 @@
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux) ;alsa
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages web)
   #:use-module (gnu packages wget)
   #:use-module (gnu packages pkg-config)
@@ -550,9 +552,10 @@ machine.")))
                "--disable-gjdoc")
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _
-               (zero? (system* "autoreconf" "-vif"))))
+           ;; XXX The bootstrap phase executes autogen.sh, which fails after
+           ;; complaining about the lack of gettext.
+           (replace 'bootstrap
+             (lambda _ (invoke "autoreconf" "-vif")))
            (add-after 'unpack 'remove-unsupported-annotations
              (lambda _
                (substitute* (find-files "java" "\\.java$")
@@ -621,10 +624,12 @@ machine.")))
                 "0bg9sb4f7qbq77c0zf9m17p47ga0kf0r9622g9p12ysg26jd1ksg"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile.in"
-                  ;; do not leak information about the build host
-                  (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
-                   "DISTRIBUTION_ID=\"\\\"guix\\\"\"")))))
+               '(begin
+                  (substitute* "Makefile.in"
+                    ;; do not leak information about the build host
+                    (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
+                     "DISTRIBUTION_ID=\"\\\"guix\\\"\""))
+                  #t))))
     (build-system gnu-build-system)
     (outputs '("out"   ; Java Runtime Environment
                "jdk"   ; Java Development Kit
@@ -844,6 +849,7 @@ machine.")))
        ("fastjar" ,fastjar)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
+       ("gcc" ,gcc-4.9) ; there's a segmentation fault when compiling with gcc-5 or gcc-7
        ("gtk" ,gtk+-2)
        ("gawk" ,gawk)
        ("giflib" ,giflib)
@@ -851,6 +857,7 @@ machine.")))
        ("jamvm" ,jamvm)
        ("lcms" ,lcms)
        ("libjpeg" ,libjpeg)
+       ("libnsl" ,libnsl)
        ("libpng" ,libpng)
        ("libtool" ,libtool)
        ("libx11" ,libx11)
@@ -967,10 +974,12 @@ bootstrapping purposes.")
                   "1w331rdqx1dcx2xb0fmjmrkdc71xqn20fxsgw8by4xhiblh88khh"))
                 (modules '((guix build utils)))
                 (snippet
-                 '(substitute* "Makefile.in"
-                    ;; do not leak information about the build host
-                    (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
-                     "DISTRIBUTION_ID=\"\\\"guix\\\"\"")))))
+                 '(begin
+                    (substitute* "Makefile.in"
+                      ;; do not leak information about the build host
+                      (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
+                       "DISTRIBUTION_ID=\"\\\"guix\\\"\""))
+                    #t))))
       (build-system gnu-build-system)
       (outputs '("out"   ; Java Runtime Environment
                  "jdk"   ; Java Development Kit
@@ -1398,6 +1407,7 @@ bootstrapping purposes.")
          ("coreutils" ,coreutils)
          ("diffutils" ,diffutils)       ;for tests
          ("gawk" ,gawk)
+         ("gcc" ,gcc-4.9) ; there's a segmentation fault when compiling with gcc-5
          ("grep" ,grep)
          ("libtool" ,libtool)
          ("pkg-config" ,pkg-config)
@@ -3526,6 +3536,21 @@ transformations and analysis algorithms allow to easily assemble custom
 complex transformations and code analysis tools.")
     (license license:bsd-3)))
 
+(define java-asm-bootstrap
+  (package
+    (inherit java-asm)
+    (name "java-asm-bootstrap")
+    (arguments
+     (substitute-keyword-arguments (package-arguments java-asm)
+       ((#:tests? _) #f)))
+    (native-inputs `())
+    (propagated-inputs
+     `(("java-aqute-bndlib" ,java-aqute-bndlib-bootstrap)
+       ("java-aqute-libg" ,java-aqute-libg-bootstrap)
+       ,@(delete `("java-aqute-bndlib" ,java-aqute-bndlib)
+                 (delete `("java-aqute-libg", java-aqute-libg)
+                         (package-inputs java-asm)))))))
+
 (define-public java-cglib
   (package
     (name "java-cglib")
@@ -4248,6 +4273,64 @@ from within Java, as well as an object registry that exposes Java objects to
 these scripting language engines.")
     (license license:asl2.0)))
 
+(define-public java-commons-jxpath
+  (package
+    (name "java-commons-jxpath")
+    (version "1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/jxpath/source/"
+                                  "commons-jxpath-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1rpgg31ayn9fwr4bfi2i1ij0npcg79ad2fv0w9hacvawsyc42cfs"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "commons-jxpath.jar"
+       ;; tests require more dependencies, including mockrunner which depends on old software
+       #:tests? #f
+       #:source-dir "src/java"))
+    (inputs
+     `(("java-tomcat" ,java-tomcat)
+       ("java-jdom" ,java-jdom)
+       ("java-commons-beanutils" ,java-commons-beanutils)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://commons.apache.org/jxpath/")
+    (synopsis "Simple interpreter of an expression language called XPath.")
+    (description "The org.apache.commons.jxpath package defines a simple
+interpreter of an expression language called XPath.  JXPath applies XPath
+expressions to graphs of objects of all kinds: JavaBeans, Maps, Servlet
+contexts, DOM etc, including mixtures thereof.")
+    (license license:asl2.0)))
+
+(define-public java-jsr250
+  (package
+    (name "java-jsr250")
+    (version "1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "javax/annotation/javax.annotation-api/"
+                                  version "/javax.annotation-api-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "08clh8n4n9wfglf75qsqfjs6yf79f7x6hqx38cn856pksszv50kz"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jdk ,icedtea-8
+       #:jar-name "jsr250.jar"))
+    (home-page "https://jcp.org/en/jsr/detail?id=250")
+    (synopsis "Security-related annotations")
+    (description "This package provides annotations for security.  It provides
+packages in the @code{javax.annotation} and @code{javax.annotation.security}
+namespaces.")
+    ;; either cddl or gpl2 only, with classpath exception
+    (license (list license:cddl1.0
+                   license:gpl2))))
+
 (define-public java-jsr305
   (package
     (name "java-jsr305")
@@ -8130,70 +8213,50 @@ by technical operatives or consultants working with enterprise platforms.")
 algorithms and xxHash hashing algorithm.")
     (license license:asl2.0)))
 
-(define-public java-bouncycastle-bcprov
+(define-public java-bouncycastle
   (package
-    (name "java-bouncycastle-bcprov")
-    (version "1.58")
+    (name "java-bouncycastle")
+    (version "1.59")
     (source (origin
               (method url-fetch)
-              (uri "https://bouncycastle.org/download/bcprov-jdk15on-158.tar.gz")
+              (uri (string-append "https://github.com/bcgit/bc-java/archive/r"
+                                  (substring version 0 1) "rv"
+                                  (substring version 2 4) ".tar.gz"))
               (sha256
                (base32
-                "1hgkg96llbvgs8i0krwz2n0j7wlg6jfnq8w8kg0cc899j0wfmf3n"))))
+                "1bwl499whlbq896w18idqw2dkp8v0wp0npv9g71i5fgf8xjh0k3q"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file
+                            (find-files "." "\\.jar$"))
+                  #t))))
     (build-system ant-build-system)
     (arguments
-     `(#:jar-name "bouncycastle-bcprov.jar"
-       #:tests? #f; no tests
-       #:source-dir "src"
+     `(#:jdk ,icedtea-8
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'unzip-src
+         (replace 'build
            (lambda _
-             (mkdir-p "src")
-             (with-directory-excursion "src"
-               (invoke "unzip" "../src.zip"))
-             #t)))))
-    (native-inputs
-     `(("unzip" ,unzip)
-       ("junit" ,java-junit)))
-    (home-page "https://www.bouncycastle.org")
-    (synopsis "Cryptographic library")
-    (description "Bouncy Castle Provider (bcprov) is a cryptographic library
-for the Java programming language.")
-    (license license:expat)))
-
-(define-public java-bouncycastle-bcpkix
-  (package
-    (name "java-bouncycastle-bcpkix")
-    (version "1.58")
-    (source (origin
-              (method url-fetch)
-              (uri "https://bouncycastle.org/download/bcpkix-jdk15on-158.tar.gz")
-              (sha256
-               (base32
-                "0is7qay02803s9f7lhnfcjlz61ni3hq5d7apg0iil7nbqkbfbcq2"))))
-    (build-system ant-build-system)
-    (arguments
-     `(#:jar-name "bouncycastle-bcpkix.jar"
-       #:tests? #f; no tests
-       #:source-dir "src"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'unzip-src
+             (invoke "ant" "-f" "ant/jdk15+.xml" "build-provider")
+             (invoke "ant" "-f" "ant/jdk15+.xml" "build")
+             #t))
+         (replace 'check
            (lambda _
-             (mkdir-p "src")
-             (with-directory-excursion "src"
-               (invoke "unzip" "../src.zip"))
-             #t)))))
+             (invoke "ant" "-f" "ant/jdk15+.xml" "test")))
+         (replace 'install
+           (install-jars "build/artifacts/jdk1.5/jars")))))
+    (inputs
+     `(("java-javax-mail" ,java-javax-mail)))
     (native-inputs
      `(("unzip" ,unzip)
-       ("junit" ,java-junit)))
-    (inputs
-     `(("bcprov" ,java-bouncycastle-bcprov)))
+       ("junit" ,java-junit)
+       ("java-native-access" ,java-native-access)
+       ("java-native-access-platform" ,java-native-access-platform)))
     (home-page "https://www.bouncycastle.org")
     (synopsis "Cryptographic library")
-    (description "Bouncy Castle Java API for PKIX, CMS, EAC, TSP, PKCS, OCSP,
-CMP, and CRMF.")
+    (description "Bouncy Castle is a cryptographic library for the Java
+programming language.")
     (license license:expat)))
 
 (define-public java-lmax-disruptor
@@ -8616,8 +8679,7 @@ protocol-independent framework to build mail and messaging applications.")
        ("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)))
+       ("java-bouncycastle" ,java-bouncycastle)))
     (home-page "https://kafka.apache.org")
     (synopsis "Distributed streaming platform")
     (description "Kafka is a distributed streaming platform, which means:
@@ -9590,3 +9652,500 @@ Java method invocation.")
 and mappings for a number of commonly used platform functions, including a
 large number of Win32 mappings as well as a set of utility classes that
 simplify native access.")))
+
+(define-public java-jsch-agentproxy-core
+  (package
+    (name "java-jsch-agentproxy-core")
+    (version "0.0.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/ymnk/jsch-agent-proxy/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "02iqg6jbc1kxvfzqcg6wy9ygqxfm82bw5rf6vnswqy4y572niz4q"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "jsch-agentproxy-core.jar"
+       #:source-dir "jsch-agent-proxy-core/src/main/java"
+       #:tests? #f)); no tests
+    (home-page "https://github.com/ymnk/jsch-agent-proxy")
+    (synopsis "Core component of the proxy to ssh-agent and Pageant in Java")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included Putty.  It will be easily integrated into JSch, and users
+will be allowed to use these programs for authentication.")
+    (license license:bsd-3)))
+
+(define-public java-jsch-agentproxy-sshagent
+  (package
+    (inherit java-jsch-agentproxy-core)
+    (name "java-jsch-agentproxy-sshagent")
+    (arguments
+     `(#:jar-name "jsch-agentproxy-sshagent.jar"
+       #:source-dir "jsch-agent-proxy-sshagent/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+    (synopsis "Proxy to ssh-agent")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included in Putty. This component contains the code for a proxy to
+ssh-agent.")))
+
+(define-public java-jsch-agentproxy-usocket-jna
+  (package
+    (inherit java-jsch-agentproxy-core)
+    (name "java-jsch-agentproxy-usocket-jna")
+    (arguments
+     `(#:jar-name "jsch-agentproxy-usocket-jna.jar"
+       #:source-dir "jsch-agent-proxy-usocket-jna/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
+       ("java-native-access" ,java-native-access)))
+    (synopsis "USocketFactory implementation using JNA")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included in Putty. This component contains an implementation of
+USocketFactory using @dfn{JNA} (Java Native Access).")))
+
+(define-public java-jsch-agentproxy-pageant
+  (package
+    (inherit java-jsch-agentproxy-core)
+    (name "java-jsch-agentproxy-pageant")
+    (arguments
+     `(#:jar-name "jsch-agentproxy-pageant.jar"
+       #:source-dir "jsch-agent-proxy-pageant/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
+       ("java-native-access" ,java-native-access)
+       ("java-native-access-platform" ,java-native-access-platform)))
+    (synopsis "Proxy to pageant")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included in Putty. This component contains the code for a proxy to
+pageant.")))
+
+(define-public java-jsch-agentproxy-usocket-nc
+  (package
+    (inherit java-jsch-agentproxy-core)
+    (name "java-jsch-agentproxy-usocket-nc")
+    (arguments
+     `(#:jar-name "jsch-agentproxy-usocket-nc.jar"
+       #:source-dir "jsch-agent-proxy-usocket-nc/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+    (synopsis "USocketFactory implementation using netcat")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included in Putty. This component contains an implementation of
+USocketFactory using netcat.")))
+
+(define-public java-jsch-agentproxy-connector-factory
+  (package
+    (inherit java-jsch-agentproxy-core)
+    (name "java-jsch-agentproxy-connector-factory")
+    (arguments
+     `(#:jar-name "jsch-agentproxy-connector-factory.jar"
+       #:source-dir "jsch-agent-proxy-connector-factory/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
+       ("java-jsch-agentproxy-sshagent" ,java-jsch-agentproxy-sshagent)
+       ("java-jsch-agentproxy-usocket-jna" ,java-jsch-agentproxy-usocket-jna)
+       ("java-jsch-agentproxy-pageant" ,java-jsch-agentproxy-pageant)
+       ("java-jsch-agentproxy-usocket-nc" ,java-jsch-agentproxy-usocket-nc)))
+    (synopsis "Connector factory for jsch agent proxy")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included in Putty. This component contains a connector factory.")))
+
+(define-public java-jsch-agentproxy-jsch
+  (package
+    (inherit java-jsch-agentproxy-core)
+    (name "java-jsch-agentproxy-jsch")
+    (arguments
+     `(#:jar-name "jsch-agentproxy-jsch.jar"
+       #:source-dir "jsch-agent-proxy-jsch/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-jsch" ,java-jsch)
+       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)))
+    (synopsis "JSch integration library for agentproxy")
+    (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
+and Pageant included in Putty. This component contains a library to use
+jsch-agent-proxy with JSch.")))
+
+(define-public java-apache-ivy
+  (package
+    (name "java-apache-ivy")
+    (version "2.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache//ant/ivy/" version
+                                  "/apache-ivy-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1xkfn57g2m7l6y0xdq75x5rnrgk52m9jx2xah70g3ggl8750hbr0"))
+              (patches
+                (search-patches
+                  "java-apache-ivy-port-to-latest-bouncycastle.patch"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "ivy.jar"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'remove-example
+           (lambda _
+             (delete-file-recursively "src/example")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (with-directory-excursion "src/java"
+               (for-each (lambda (file)
+                           (install-file file (string-append "../../build/classes/" (dirname file))))
+                 (append
+                   (find-files "." ".*.css")
+                   (find-files "." ".*.ent")
+                   (find-files "." ".*.html")
+                   (find-files "." ".*.properties")
+                   (find-files "." ".*.xsd")
+                   (find-files "." ".*.xsl")
+                   (find-files "." ".*.xml"))))))
+         (add-before 'build 'fix-vfs
+           (lambda _
+             (substitute*
+               '("src/java/org/apache/ivy/plugins/repository/vfs/VfsRepository.java"
+                 "src/java/org/apache/ivy/plugins/repository/vfs/VfsResource.java")
+               (("import org.apache.commons.vfs") "import org.apache.commons.vfs2"))
+             #t))
+         (add-before 'install 'copy-manifest
+           (lambda _
+             (install-file "META-INF/MANIFEST.MF" "build/classes/META-INF")
+             #t))
+         (add-before 'install 'repack
+           (lambda _
+             (invoke "jar" "-cmf" "build/classes/META-INF/MANIFEST.MF" "build/jar/ivy.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (add-after 'install 'install-bin
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                    (ivy (string-append bin "/ivy"))
+                    (jar (string-append (assoc-ref outputs "out") "/share/java/ivy.jar")))
+               (mkdir-p bin)
+               (with-output-to-file ivy
+                 (lambda _
+                   (display (string-append
+                              "#!" (which "sh") "\n"
+                              "if [[ -z $CLASSPATH ]]; then\n"
+                              "  cp=\"" (getenv "CLASSPATH") ":" jar "\"\n"
+                              "else\n"
+                              "  cp=\"" (getenv "CLASSPATH") ":" jar ":$CLASSPATH\"\n"
+                              "fi\n"
+                              (which "java") " -cp $cp org.apache.ivy.Main $@\n"))))
+               (chmod ivy #o755)
+               #t))))))
+    (inputs
+     `(("java-bouncycastle" ,java-bouncycastle)
+       ("java-commons-cli" ,java-commons-cli)
+       ("java-commons-collections" ,java-commons-collections)
+       ("java-commons-httpclient" ,java-commons-httpclient)
+       ("java-commons-lang" ,java-commons-lang)
+       ("java-commons-vfs" ,java-commons-vfs)
+       ("java-jakarta-oro" ,java-jakarta-oro)
+       ("java-jsch" ,java-jsch)
+       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
+       ("java-jsch-agentproxy-connector-factory" ,java-jsch-agentproxy-connector-factory)
+       ("java-jsch-agentproxy-jsch" ,java-jsch-agentproxy-jsch)
+       ("java-junit" ,java-junit)))
+    (home-page "https://ant.apache.org/ivy")
+    (synopsis "Dependency manager for the Java programming language")
+    (description "Ivy is a tool for managing (recording, tracking, resolving
+and reporting) project dependencies.  It is characterized by the following:
+
+@itemize
+@item flexibility and configurability - Ivy is essentially process agnostic
+      and is not tied to any methodology or structure.  Instead it provides the
+      necessary flexibility and configurability to be adapted to a broad range
+      of dependency management and build processes.
+@item tight integration with Apache Ant - while available as a standalone tool,
+      Ivy works particularly well with Apache Ant providing a number of
+      powerful Ant tasks ranging from dependency resolution to dependency
+      reporting and publication.
+@end itemize")
+    (license license:asl2.0)))
+
+(define-public java-eclipse-sisu-inject
+  (package
+    (name "java-eclipse-sisu-inject")
+    (version "0.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/eclipse/sisu.inject/"
+                                  "archive/releases/" version ".tar.gz"))
+              (sha256
+               (base32
+                "11rg6yw5nl13i65xsp4jxxgr341qcnnaan48p767h28kb07s0ajn"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "eclipse-sisu-inject.jar"
+       #:source-dir "org.eclipse.sisu.inject/src"
+       #:jdk ,icedtea-8
+       #:tests? #f)); no tests
+    (inputs
+     `(("java-guice" ,java-guice)
+       ("java-guice-servlet" ,java-guice-servlet)
+       ("java-javax-inject" ,java-javax-inject)
+       ("java-tomcat" ,java-tomcat)
+       ("java-junit" ,java-junit)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-jsr305" ,java-jsr305)
+       ("java-jsr250" ,java-jsr250)
+       ("java-cdi-api" ,java-cdi-api)
+       ("java-osgi-framework" ,java-osgi-framework)
+       ("java-osgi-util-tracker" ,java-osgi-util-tracker)
+       ("java-testng" ,java-testng)))
+    (home-page "https://www.eclipse.org/sisu/")
+    (synopsis "Classpath scanning, auto-binding, and dynamic auto-wiring")
+    (description "Sisu is a modular JSR330-based container that supports
+classpath scanning, auto-binding, and dynamic auto-wiring.  Sisu uses
+Google-Guice to perform dependency injection and provide the core JSR330
+support, but removes the need to write explicit bindings in Guice modules.
+Integration with other containers via the Eclipse Extension Registry and the
+OSGi Service Registry is a goal of this project.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-sisu-plexus
+  (package
+    (name "java-eclipse-sisu-plexus")
+    (version "0.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/eclipse/sisu.plexus/"
+                                  "archive/releases/" version ".tar.gz"))
+              (sha256
+               (base32
+                "0lbj7nxy5j0z71k407zbb82icfqh7midrfk0fb3fa3jzdjz0d9d9"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file (find-files "." ".*.jar"))
+                  (rename-file "org.eclipse.sisu.plexus.tests/src"
+                               "org.eclipse.sisu.plexus.tests/java")
+                  #t))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "eclipse-sisu-plexus.jar"
+       #:source-dir "org.eclipse.sisu.plexus/src"
+       #:test-dir "org.eclipse.sisu.plexus.tests"
+       #:test-exclude
+       (list
+         ;; This test fails probably because we can't generate the necessary
+         ;; meta-inf files.
+         "**/PlexusLoggingTest.*"
+         ;; FIXME: This test fails because of some injection error
+         "**/PlexusRequirementTest.*")
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (install-file "org.eclipse.sisu.plexus/META-INF/plexus/components.xml"
+                           "build/classes/META-INF/plexus")
+             #t))
+         (add-before 'check 'build-test-jar
+           (lambda _
+             (with-directory-excursion "org.eclipse.sisu.plexus.tests/resources/component-jar/src/main/"
+               (mkdir "build")
+               (with-directory-excursion "java"
+                 (apply invoke "javac" "-cp"
+                        (string-append (getenv "CLASSPATH")
+                                       ":../../../../../build/classes")
+                        (find-files "." ".*.java"))
+                 (for-each (lambda (file) (install-file file (string-append "../build/" file)))
+                           (find-files "." ".*.jar")))
+               (mkdir-p "build/META-INF/plexus")
+               (copy-file "resources/META-INF/plexus/components.xml"
+                          "build/META-INF/plexus/components.xml")
+               (with-directory-excursion "build"
+                 (invoke "jar" "cf" "../../../component-jar-0.1.jar" ".")))
+             (with-directory-excursion "org.eclipse.sisu.plexus.tests/"
+               (copy-recursively "META-INF" "../build/test-classes/META-INF")
+               (substitute* "java/org/eclipse/sisu/plexus/DefaultPlexusContainerTest.java"
+                 (("resources/component-jar")
+                  "org.eclipse.sisu.plexus.tests/resources/component-jar")))
+             #t)))))
+    (inputs
+     `(("java-plexus-classworlds" ,java-plexus-classworlds)
+       ("java-plexus-util" ,java-plexus-utils)
+       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+       ("java-osgi-framework" ,java-osgi-framework)
+       ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
+       ("java-guice" ,java-guice)
+       ("java-javax-inject" ,java-javax-inject)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-junit" ,java-junit)))
+    (native-inputs
+     `(("java-guava" ,java-guava)
+       ("java-aopalliance" ,java-aopalliance)
+       ("java-cglib" ,java-cglib)
+       ("java-asm" ,java-asm)))
+    (home-page "https://www.eclipse.org/sisu/")
+    (synopsis "Plexus support for the sisu container")
+    (description "Sisu is a modular JSR330-based container that supports
+classpath scanning, auto-binding, and dynamic auto-wiring.  This package
+adds Plexus support to the Sisu-Inject container.")
+    (license license:epl1.0)))
+
+(define-public java-commons-compiler
+  (package
+    (name "java-commons-compiler")
+    (version "3.0.8")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/janino-compiler/janino")
+                     (commit "91aa95686d1e4ca3b16a984a03a38686572331b2")))
+              (file-name (string-append name "-" version))
+              (sha256
+               (base32
+                "04hfdl59sgh20qkxzgnibvs8f9hy6n7znxwpk611y5d89977y62r"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (for-each delete-file
+                            (find-files "." "\\.jar$"))
+                  #t))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "commons-compiler.jar"
+       #:source-dir "commons-compiler/src/main"
+       #:tests? #f)); no tests
+    (home-page "https://github.com/janino-compiler/janino")
+    (synopsis "Java compiler")
+    (description "Commons-compiler contains an API for janino, including the
+@code{IExpressionEvaluator}, @code{IScriptEvaluator}, @code{IClassBodyEvaluator}
+and @code{ISimpleCompiler} interfaces.")
+    (license license:bsd-3)))
+
+(define-public java-janino
+  (package
+    (inherit java-commons-compiler)
+    (name "java-janino")
+    (arguments
+     `(#:jar-name "janino.jar"
+       #:source-dir "src/main/java"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "janino"))))))
+    (inputs
+     `(("java-commons-compiler" ,java-commons-compiler)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (description "Janino is a Java compiler.  Janino can compile a set of
+source files to a set of class files like @code{javac}, but also compile a
+Java expression, block, class body or source file in memory, load the bytecode
+and execute it directly in the same JVM.  @code{janino} can also be used for
+static code analysis or code manipulation.")))
+
+(define-public java-logback-core
+  (package
+    (name "java-logback-core")
+    (version "1.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/qos-ch/logback/archive/v_"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1x6ga74yfgm94cfx98gybakbrlilx8i2gn6dx13l40kasmys06mi"))
+              (modules '((guix build utils)))
+              (snippet
+               '(delete-file-recursively "logback-access/lib"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "logback.jar"
+       #:source-dir "src/main/java"
+       #:test-dir "src/test"
+       #:test-exclude
+       ;; These tests fail with Unable to set MockitoNamingPolicy on cglib generator
+       ;; which creates FastClasses
+       (list "**/AllCoreTest.*"
+             "**/AutoFlushingObjectWriterTest.*"
+             "**/PackageTest.*"
+             "**/ResilientOutputStreamTest.*"
+             ;; And we still don't want to run abstract classes
+             "**/Abstract*.*")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "logback-core")
+             #t)))))
+    (inputs
+     `(("java-javax-mail" ,java-javax-mail)
+       ("java-tomcat" ,java-tomcat)
+       ("java-commons-compiler" ,java-commons-compiler)
+       ("java-janino" ,java-janino)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-mockito-1" ,java-mockito-1)
+       ("java-cglib" ,java-cglib)
+       ("java-asm" ,java-asm)
+       ("java-objenesis" ,java-objenesis)
+       ("java-joda-time" ,java-joda-time)))
+    (home-page "https://logback.qos.ch")
+    (synopsis "Logging for java")
+    (description "Logback is intended as a successor to the popular log4j project.
+This module lays the groundwork for the other two modules.")
+    ;; Either epl1.0 or lgpl2.1
+    (license (list license:epl1.0
+                   license:lgpl2.1))))
+
+(define-public java-logback-classic
+  (package
+    (inherit java-logback-core)
+    (name "java-logback-classic")
+    (arguments
+     `(#:jar-name "logback-classic.jar"
+       #:source-dir "src/main/java"
+       #:test-dir "src/test"
+       #:tests? #f; tests require more packages: h2, greenmail, hsql, subethamail, slf4j, log4j, felix
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "logback-classic")
+             #t))
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir-p "build/classes")
+             (setenv "CLASSPATH"
+                     (string-join
+                       (apply append (map (lambda (input)
+                                            (find-files (assoc-ref inputs input)
+                                                        ".*.jar"))
+                                          '("java-logback-core" "java-slf4j-api"
+                                            "java-commons-compiler" "java-tomcat"
+                                            "groovy")))
+                       ":"))
+             (apply invoke "groovyc" "-d" "build/classes" "-j"
+                    (find-files "src/main/" ".*\\.(groovy|java)$"))
+             (invoke "ant" "jar")
+             #t)))))
+    (inputs
+     `(("java-logback-core" ,java-logback-core)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ,@(package-inputs java-logback-core)))
+    (native-inputs
+     `(("groovy" ,groovy)))
+    (description "Logback is intended as a successor to the popular log4j project.
+This module can be assimilated to a significantly improved version of log4j.
+Moreover, @code{logback-classic} natively implements the slf4j API so that you
+can readily switch back and forth between logback and other logging frameworks
+such as log4j or @code{java.util.logging} (JUL).")))