Subject: [bug#29061] Java patches

From: Julien Lepiller <[email-masked]>
Date: Sun, 29 Oct 2017 21:54:38 +0100

On Sun, 29 Oct 2017 21:47:09 +0100
Julien Lepiller <[email-masked]> wrote:

> Hi, here are 22 new java patches that get us a bit closer to maven :)
> 
> 
> 

Somehow I can't use git send-email, so here are the patches.

>From 10c1801922abbc82e48360b22d5d8681449715b9 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:05:04 +0200
Subject: [PATCH 01/22] gnu: Add java-bsh.

* gnu/packages/java.scm (java-bsh): New variable.
---
 gnu/packages/java.scm | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 70afb7be1..16203317a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6256,3 +6256,34 @@ file when the JVM loads it.")
 trivial to parse command line parameters.  Parameters are declared with
 annotations.")
     (license license:asl2.0)))
+
+(define-public java-bsh
+  (package
+    (name "java-bsh")
+    (version "2.0b6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/beanshell/beanshell/archive/"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1bawkxk6jyc75hxvzkpz689h73cn3f222m0ar3nvb0dal2b85kfv"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "jarall"
+       #:test-target "junit-tests-all"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((share (string-append (assoc-ref outputs "out") "/share/java")))
+               (mkdir-p share)
+               (copy-file "dist/bsh-2.0b6.jar" (string-append share "/bsh-2.0b6.jar"))))))))
+    (home-page "http://beanshell.org/")
+    (synopsis "Lightweight Scripting for Java")
+    (description "BeanShell is a small, free, embeddable Java source
+interpreter with object scripting language features, written in Java.
+BeanShell dynamically executes standard Java syntax and extends it with common
+scripting conveniences such as loose types, commands, and method closures like
+those in Perl and JavaScript.")
+    (license license:asl2.0)))
-- 
2.14.3

>From f02f8c081e1627180e9f78393c3ab1fd8ad8b60b Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:05:04 +0200
Subject: [PATCH 02/22] gnu: Add java-bsh.

* gnu/packages/java.scm (java-bsh): New variable.
---
 gnu/packages/java.scm | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 16203317a..5d2a71901 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6265,6 +6265,7 @@ annotations.")
               (method url-fetch)
               (uri (string-append "https://github.com/beanshell/beanshell/archive/"
                                   version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
                 "1bawkxk6jyc75hxvzkpz689h73cn3f222m0ar3nvb0dal2b85kfv"))))
@@ -6278,7 +6279,8 @@ annotations.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((share (string-append (assoc-ref outputs "out") "/share/java")))
                (mkdir-p share)
-               (copy-file "dist/bsh-2.0b6.jar" (string-append share "/bsh-2.0b6.jar"))))))))
+               (copy-file "dist/bsh-2.0b6.jar"
+                          (string-append share "/bsh-2.0b6.jar"))))))))
     (home-page "http://beanshell.org/")
     (synopsis "Lightweight Scripting for Java")
     (description "BeanShell is a small, free, embeddable Java source
-- 
2.14.3

>From 016af8aad804f488e530ae680855f175e8d8cfd1 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:08:38 +0200
Subject: [PATCH 03/22] gnu: Add java-jmock.

* gnu/packages/java.scm (java-jmock): New variable.
---
 gnu/packages/java.scm | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 5d2a71901..ce3d794b8 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2513,6 +2513,47 @@ interactions between the objects in your programs.
 
 The jMock library
 
+@itemize
+@item makes it quick and easy to define mock objects
+@item lets you precisely specify the interactions between
+  your objects, reducing the brittleness of your tests
+@item plugs into your favourite test framework
+@item is easy to extend.
+@end itemize\n")
+    (license license:bsd-3)))
+
+(define-public java-jmock
+  (package
+    (name "java-jmock")
+    (version "2.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/jmock-developers/"
+                                  "jmock-library/archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "18650a9g8xffcsdb6w91pbswa7f40fp2sh6s3nclkclz5dbzq8f0"))))
+    (build-system ant-build-system)
+    (inputs
+     `(("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-asm" ,java-asm)
+       ("java-bsh" ,java-bsh)
+       ("java-junit" ,java-junit)))
+    (arguments
+     `(#:jar-name "java-jmock.jar"
+       #:source-dir "jmock/src/main/java"
+       #:test-dir "jmock/src/test"))
+    (native-inputs
+     `(("cglib" ,java-cglib)))
+    (home-page "http://www.jmock.org")
+    (synopsis "Mock object library for test-driven development")
+    (description "JMock is a library that supports test-driven development of
+Java code with mock objects.  Mock objects help you design and test the
+interactions between the objects in your programs.
+
+The jMock library
+
 @itemize
 @item makes it quick and easy to define mock objects
 @item lets you precisely specify the interactions between
-- 
2.14.3

>From f2b5dcd1cbe5a3a8fcb9da6e6bc66e697618b645 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:09:31 +0200
Subject: [PATCH 04/22] gnu: Add java-jmock-junit4.

* gnu/packages/java.scm (java-jmock-junit4): New variable.
---
 gnu/packages/java.scm | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index ce3d794b8..ae73bd870 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2563,6 +2563,21 @@ The jMock library
 @end itemize\n")
     (license license:bsd-3)))
 
+(define-public java-jmock-junit4
+  (package
+    (inherit java-jmock)
+    (name "java-jmock-junit4")
+    (arguments
+     `(#:jar-name "java-jmock-junit4.jar"
+       #:source-dir "jmock-junit4/src/main/java"
+       #:test-dir "jmock-junit4/src/test"))
+    (inputs
+     `(("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-asm" ,java-asm)
+       ("java-bsh" ,java-bsh)
+       ("java-jmock" ,java-jmock)
+       ("java-jumit" ,java-junit)))))
+
 (define-public java-hamcrest-all
   (package (inherit java-hamcrest-core)
     (name "java-hamcrest-all")
-- 
2.14.3

>From 330cbcb37084af37dccd0d63adf381c671d4317c Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:10:38 +0200
Subject: [PATCH 05/22] gnu: Add java-jmock-legacy.

* gnu/packages/java.scm (java-jmock-legacy): New variable.
---
 gnu/packages/java.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index ae73bd870..af0b851e5 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2578,6 +2578,33 @@ The jMock library
        ("java-jmock" ,java-jmock)
        ("java-jumit" ,java-junit)))))
 
+(define-public java-jmock-legacy
+  (package
+    (inherit java-jmock)
+    (name "java-jmock-legacy")
+    (arguments
+     `(#:jar-name "java-jmock-legacy.jar"
+       #:source-dir "jmock-legacy/src/main/java"
+       #:test-dir "jmock-legacy/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'copy-tests
+           (lambda _
+             ;; This file is a dependancy of some tests
+             (let ((file "org/jmock/test/acceptance/PackageProtectedType.java"))
+               (copy-file (string-append "jmock/src/test/java/" file)
+                          (string-append "jmock-legacy/src/test/java/" file))))))))
+    (inputs
+     `(("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-objenesis" ,java-objenesis)
+       ("java-cglib" ,java-cglib)
+       ("java-jmock" ,java-jmock)
+       ("java-asm" ,java-asm)
+       ("java-bsh" ,java-bsh)
+       ("java-junit" ,java-junit)))
+    (native-inputs
+     `(("java-jmock-junit4" ,java-jmock-junit4)))))
+
 (define-public java-hamcrest-all
   (package (inherit java-hamcrest-core)
     (name "java-hamcrest-all")
-- 
2.14.3

>From 9b238e290c952862725db31fbbc1bc7c73728947 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:14:53 +0200
Subject: [PATCH 06/22] gnu: Add java-fest-util.

* gnu/packages/java.scm (java-fest-util): New variable.
---
 gnu/packages/java.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index af0b851e5..9cb14cf27 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6372,3 +6372,26 @@ BeanShell dynamically executes standard Java syntax and extends it with common
 scripting conveniences such as loose types, commands, and method closures like
 those in Perl and JavaScript.")
     (license license:asl2.0)))
+
+(define-public java-fest-util
+  (package
+    (name "java-fest-util")
+    (version "1.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/alexruiz/fest-util/"
+                                  "archive/fest-util-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05g6hljz5mdaakk8d7g32klbhz9bdwp3qlj6rdaggdidxs3x1sb8"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-fest-util.jar"
+       #:source-dir "src/main/java"))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://github.com/alexruiz/fest-util")
+    (synopsis "FEST common utilities")
+    (description "Common utilities used in all FEST module.")
+    (license license:asl2.0)))
-- 
2.14.3

>From ca5d817578536b37b81946732946f9bf14eb306c Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:15:30 +0200
Subject: [PATCH 07/22] gnu: Add java-fest-test.

* gnu/packages/java.scm (java-fest-test): New variable.
---
 gnu/packages/java.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 9cb14cf27..8d2f94b84 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6395,3 +6395,26 @@ those in Perl and JavaScript.")
     (synopsis "FEST common utilities")
     (description "Common utilities used in all FEST module.")
     (license license:asl2.0)))
+
+(define-public java-fest-test
+  (package
+    (name "java-fest-test")
+    (version "2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/alexruiz/fest-test/"
+                                  "archive/fest-test-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1rxfbw6l9vc65iy1x3fb617qc6y4w2k430pgf1mfbxfdlxbm0f7g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-fest-test.jar"
+       #:source-dir "src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("junit" ,java-junit)))
+    (home-page "https://github.com/alexruiz/fest-test")
+    (synopsis "Common FEST testing infrastructure")
+    (description "Fest-test contains the common FEST testing infrastructure.")
+    (license license:asl2.0)))
-- 
2.14.3

>From 4f9002fdbd0daebebbfd3426ad7465d8ef9d5a9e Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:16:10 +0200
Subject: [PATCH 08/22] gnu: Add java-fest-assert.

* gnu/packages/java.scm (java-fest-assert): New variable.
---
 gnu/packages/java.scm | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 8d2f94b84..10040fd0f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6418,3 +6418,40 @@ those in Perl and JavaScript.")
     (synopsis "Common FEST testing infrastructure")
     (description "Fest-test contains the common FEST testing infrastructure.")
     (license license:asl2.0)))
+
+(define-public java-fest-assert
+  (package
+    (name "java-fest-assert")
+    (version "2.0M10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/alexruiz/fest-assert-2.x/"
+                                  "archive/fest-assert-core-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1bi0iqavikzww6rxvz5jyg7y6bflv95s6ibryxx0xfcxrrw6i5lw"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-fest-assert.jar"
+       #:source-dir "src/main/java"
+       #:test-exclude
+       (list
+         "**/Abstract*.java"
+         "**/*BaseTest.java"
+         ;; Unable to set MockitoNamingPolicy on cglib generator which creates FastClasses
+         "**/MessageFormatter_format_Test.java"
+         "**/internal/*/*_assert*_Test.java")))
+    (inputs
+     `(("java-fest-util" ,java-fest-util)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-fest-test" ,java-fest-test)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-mockito" ,java-mockito-1)
+       ("java-cglib" ,java-cglib)
+       ("java-objenesis" ,java-objenesis)
+       ("java-asm" ,java-asm)))
+    (home-page "https://github.com/alexruiz/fest-assert-2.x")
+    (synopsis "FEST fluent assertions")
+    (description "FEST-Assert provides a fluent interface for assertions.")
+    (license license:asl2.0)))
-- 
2.14.3

>From d689aaea1993a7c51516139864adf78dd65dfcff Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:18:59 +0200
Subject: [PATCH 09/22] gnu: Add java-testng.

* gnu/packages/java.scm (java-testng): New variable.
---
 gnu/packages/java.scm | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 10040fd0f..947ccfbd9 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6455,3 +6455,63 @@ those in Perl and JavaScript.")
     (synopsis "FEST fluent assertions")
     (description "FEST-Assert provides a fluent interface for assertions.")
     (license license:asl2.0)))
+
+(define-public java-testng
+  (package
+    (name "java-testng")
+    (version "6.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/cbeust/testng/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "01j2x47wkj7n5w6gpcjfbwgc88ai5654b23lb87w7nsrj63m3by6"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8; java.util.function
+       #:jar-name "java-testng.jar"
+       #:source-dir "src/main/java"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "src/test/resources" "build/test-classes")
+             #t))
+         (replace 'check
+           (lambda _
+             (system* "ant" "compile-tests")
+             ;; we don't have groovy
+             (substitute* "src/test/resources/testng.xml"
+               (("<class name=\"test.groovy.GroovyTest\" />") ""))
+             (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                         ":build/classes"
+                                                         ":build/test-classes")
+                             "-Dtest.resources.dir=src/test/resources"
+                             "org.testng.TestNG" "src/test/resources/testng.xml")))))))
+    (propagated-inputs
+     `(("junit" ,java-junit)
+       ("java-jsr305" ,java-jsr305)
+       ("java-bsh" ,java-bsh)
+       ("java-jcommander" ,java-jcommander)
+       ("java-guice" ,java-guice)
+       ("snakeyaml" ,java-snakeyaml)))
+    (native-inputs
+     `(("guava" ,java-guava)
+       ("java-javax-inject" ,java-javax-inject)
+       ("java-hamcrest" ,java-hamcrest-all)
+       ("java-assertj" ,java-assertj)
+       ("cglib" ,java-cglib)
+       ("asm" ,java-asm)
+       ("aopalliance" ,java-aopalliance)))
+    (home-page "http://testng.org")
+    (synopsis "Testing framework")
+    (description "TestNG is a testing framework inspired from JUnit and NUnit
+but introducing some new functionalities that make it more powerful and easier
+to use.")
+    (license license:asl2.0)))
-- 
2.14.3

>From ff6b73b44424949796b18689e4c5aba156573b41 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:30:48 +0200
Subject: [PATCH 10/22] gnu: Add java-mvel2.

* gnu/packages/java.scm (java-mvel2): New variable.
---
 gnu/packages/java.scm | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 947ccfbd9..96976641f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6515,3 +6515,107 @@ those in Perl and JavaScript.")
 but introducing some new functionalities that make it more powerful and easier
 to use.")
     (license license:asl2.0)))
+
+(define-public java-jnacl
+  (package
+    (name "java-jnacl")
+    (version "0.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/neilalexander/jnacl")
+                     (commit "40c322e0a42637ab17cdf941138eeaf2494055f8")))
+              (sha256
+               (base32
+                "1pspnmp44q61a2q4bpslpxw86rfn8s5l0xgvyrikqgdvg7ypx597"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-jnacl.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-tests
+           (lambda _
+             (substitute* "src/test/java/com/neilalexander/jnacl/NaClTest.java"
+               (("assertions.Assertions") "assertions.api.Assertions"))
+             (substitute* "src/test/java/com/neilalexander/jnacl/NaclSecretBoxTest.java"
+               (("assertions.Assertions") "assertions.api.Assertions"))
+             #t))
+         (replace 'check
+           (lambda _
+             (system* "ant" "compile-tests")
+             (and
+               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                           ":build/classes"
+                                                           ":build/test-classes")
+                               "org.testng.TestNG" "-testclass"
+                               "build/test-classes/com/neilalexander/jnacl/NaclSecretBoxTest.class"))
+               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                           ":build/classes"
+                                                           ":build/test-classes")
+                               "org.testng.TestNG" "-testclass"
+                               "build/test-classes/com/neilalexander/jnacl/NaClTest.class"))))))))
+    (native-inputs
+     `(("java-testng" ,java-testng)
+       ("java-fest-util" ,java-fest-util)
+       ("java-fest-assert" ,java-fest-assert)))
+    (home-page "https://github.com/neilalexander/jnacl")
+    (synopsis "Java implementation of NaCl")
+    (description "Pure Java implementation of the NaCl: Networking and
+Cryptography library.")
+    (license license:mpl2.0)))
+
+(define-public java-mvel2
+  (package
+    (name "java-mvel2")
+    (version "2.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/mvel/mvel/archive/mvel2-"
+                                  version ".Final.tar.gz"))
+              (sha256
+               (base32
+                "01ph5s9gm16l2qz58lg21w6fna7xmmrj7f9bzqr1jim7h9557d3z"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "mvel2.jar"
+       #:source-dir "src/main/java"
+       #:test-exclude
+       (list "**/Abstract*.java"
+             ;; Base class with no tests
+             "**/MVELThreadTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-bin
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (with-output-to-file (string-append bin "/mvel2")
+                 (lambda _
+                   (display
+                     (string-append
+                       "#!" (which "bash") "\n"
+                       "if [ \"$#\" -ne \"2\" ]; then\n"
+                       "echo 'Usage: mvel2 <script> <out.dir>'\n"
+                       "exit\n"
+                       "fi\n"
+                       "java -Dout.dir=$2 -cp " (getenv "CLASSPATH")
+                       ":" (assoc-ref outputs "out") "/share/java/mvel2.jar"
+                       " org.mvel2.sh.Main $1"))))
+               (chmod (string-append bin "/mvel2") #o755))
+             #t)))))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://github.com/mvel/mvel")
+    (synopsis "MVFLEX Expression Language")
+    (description "MVEL has largely been inspired by Java syntax, but has some
+fundamental differences aimed at making it more efficient as an expression
+language, such as operators that directly support collection, array and string
+matching, as well as regular expressions.  MVEL is used to evaluate expressions
+written using Java syntax.
+
+In addition to the expression language, MVEL serves as a templating language for
+configuration and string construction.")
+    (license license:asl2.0)))
-- 
2.14.3

>From af50ada5024ff18e2e7135c74ed89e46ad0d1e74 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:32:43 +0200
Subject: [PATCH 11/22] gnu: Add java-lz4.

* gnu/packages/java.scm (java-lz4): New variable.
---
 gnu/packages/java.scm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 96976641f..19c3f116e 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6619,3 +6619,35 @@ written using Java syntax.
 In addition to the expression language, MVEL serves as a templating language for
 configuration and string construction.")
     (license license:asl2.0)))
+
+(define-public java-lz4
+  (package
+    (name "java-lz4")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/lz4/lz4-java/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "096dm57p2lzqk28n0j2p52x2j3cvnsd2dfqn43n7vbwrkjsy7y54"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "lz4.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "src/java:src/java-unsafe"
+       #:tests? #f; FIXME: requires more dependencies
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'generate-source
+           (lambda _
+             (with-directory-excursion "src/build/source_templates"
+               (zero? (system* "mvel2" "../gen_sources.mvel" "../../java"))))))))
+    (native-inputs
+     `(("mvel" ,java-mvel2)))
+    (home-page "https://jpountz.github.io/lz4-java")
+    (synopsis "Compression algorithm")
+    (description "LZ4 - Java is a Java port of the popular lz4 compression
+algorithms and xxHash hashing algorithm.")
+    (license license:asl2.0)))
-- 
2.14.3

>From 3ea3acbd6cc141687107b1ad2a14bad7cefb9ebe Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:36:11 +0200
Subject: [PATCH 12/22] gnu: Add java-bouncycastle-bcprov.

* gnu/packages/java.scm (java-bouncycastle-bcprov): New variable.
---
 gnu/packages/java.scm | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 19c3f116e..237f43431 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6651,3 +6651,34 @@ configuration and string construction.")
     (description "LZ4 - Java is a Java port of the popular lz4 compression
 algorithms and xxHash hashing algorithm.")
     (license license:asl2.0)))
+
+(define-public java-bouncycastle-bcprov
+  (package
+    (name "java-bouncycastle-bcprov")
+    (version "1.58")
+    (source (origin
+              (method url-fetch)
+              (uri "https://bouncycastle.org/download/bcprov-jdk15on-158.tar.gz")
+              (sha256
+               (base32
+                "1hgkg96llbvgs8i0krwz2n0j7wlg6jfnq8w8kg0cc899j0wfmf3n"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "bouncycastle-bcprov.jar"
+       #:tests? #f; no tests
+       #:source-dir "src"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'unzip-src
+           (lambda _
+             (mkdir-p "src")
+             (with-directory-excursion "src"
+               (zero? (system* "unzip" "../src.zip"))))))))
+    (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)))
-- 
2.14.3

>From b55a66d28b86bd2f7709e76f610c5ca65baaf550 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Tue, 24 Oct 2017 22:46:15 +0200
Subject: [PATCH 13/22] gnu: Add java-bouncycastle-bcpkix.

* gnu/packages/java.scm (java-bouncycastle-bcpkix): New variable.
---
 gnu/packages/java.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 237f43431..966aa0e3a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6682,3 +6682,36 @@ algorithms and xxHash hashing algorithm.")
     (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
+           (lambda _
+             (mkdir-p "src")
+             (with-directory-excursion "src"
+               (zero? (system* "unzip" "../src.zip"))))))))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("junit" ,java-junit)))
+    (inputs
+     `(("bcprov" ,java-bouncycastle-bcprov)))
+    (home-page "https://www.bouncycastle.org")
+    (synopsis "Cryptographic library")
+    (description "Bouncy Castle Java API for PKIX, CMS, EAC, TSP, PKCS, OCSP,
+CMP, and CRMF.")
+    (license license:expat)))
-- 
2.14.3

>From 1e5bb92042d16260ff8f62ebae8afb1ffd651f0d Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 22:18:24 +0200
Subject: [PATCH 14/22] gnu: Add java-lmax-disruptor.

* gnu/packages/java.scm (java-lmax-disruptor): New variable.
---
 gnu/packages/java.scm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 966aa0e3a..88750f10f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6715,3 +6715,38 @@ for the Java programming language.")
     (description "Bouncy Castle Java API for PKIX, CMS, EAC, TSP, PKCS, OCSP,
 CMP, and CRMF.")
     (license license:expat)))
+
+(define-public java-lmax-disruptor
+  (package
+    (name "java-lmax-disruptor")
+    (version "3.3.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/LMAX-Exchange/disruptor/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "17da2gwj5abnlsfgn2xqjk5lgzbg4vkb0hdv2dvc8r2fx4bi7w3g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-lmax-disruptor.jar"
+       #:jdk ,icedtea-8
+       #:tests? #f)); tests hang
+    (inputs
+     `(("junit" ,java-junit)
+       ("java-hdrhistogram" ,java-hdrhistogram)
+       ("java-jmock" ,java-jmock)
+       ("java-jmock-legacy" ,java-jmock-legacy)
+       ("java-jmock-junit4" ,java-jmock-junit4)
+       ("java-hamcrest-all" ,java-hamcrest-all)))
+    (native-inputs
+     `(("cglib" ,java-cglib)
+       ("objenesis" ,java-objenesis)
+       ("asm" ,java-asm)))
+    (home-page "https://www.lmax.com/disruptor")
+    (synopsis "High performance inter-thread communication")
+    (description "LMAX Disruptor is a software pattern and software component
+for high performance inter-thread communication that avoids the need for
+message queues or resource locking.")
+    (license license:asl2.0)))
-- 
2.14.3

>From 33a59d9a2535632fd15c9d8f2e8ee610473b65c8 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 22:59:55 +0200
Subject: [PATCH 15/22] gnu: Add java-xerial-core.

* gnu/packages/java.scm (java-xerial-core): New variable.
---
 gnu/packages/java.scm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 88750f10f..fd242c0f2 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6750,3 +6750,38 @@ CMP, and CRMF.")
 for high performance inter-thread communication that avoids the need for
 message queues or resource locking.")
     (license license:asl2.0)))
+
+(define-public java-xerial-core
+  (package
+    (name "java-xerial-core")
+    (version "2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/xerial/xerial-java/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0d3g863i41bgalpa4xr3vm1h140l091n8iwgq5qvby5yivns9y8d"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "xerial-core.jar"
+       #:source-dir "xerial-core/src/main/java"
+       #:test-dir "xerial-core/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "xerial-core/src/main/resources"
+                               "build/classes")
+             #t)))))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://github.com/xerial/xerial-java")
+    (synopsis "Data managment libraries for Java")
+    (description "Xerial is a set of data management libraries for the Java
+programming language.  The ulitimate goal of the Xerial project is to manage
+everything as database, including class objects, text format data, data
+streams, etc.")
+    (license license:asl2.0)))
-- 
2.14.3

>From d300f5ec70007f7554f14031b2af2def5ad3f439 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 23:05:10 +0200
Subject: [PATCH 16/22] gnu: Add java-powermock-reflect.

* gnu/packages/java.scm (java-powermock-reflect): New variable.
---
 gnu/local.mk                                       |   1 +
 gnu/packages/java.scm                              |  38 +++++
 .../patches/java-powermock-fix-java-files.patch    | 178 +++++++++++++++++++++
 3 files changed, 217 insertions(+)
 create mode 100644 gnu/packages/patches/java-powermock-fix-java-files.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 90dc7aec1..8e562c018 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -744,6 +744,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
   %D%/packages/patches/jacal-fix-texinfo.patch			\
+  %D%/packages/patches/java-powermock-fix-java-files.patch		\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jbig2dec-CVE-2016-9601.patch		\
   %D%/packages/patches/jbig2dec-CVE-2017-7885.patch		\
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index fd242c0f2..a77e76ee3 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6785,3 +6785,41 @@ programming language.  The ulitimate goal of the Xerial project is to manage
 everything as database, including class objects, text format data, data
 streams, etc.")
     (license license:asl2.0)))
+
+(define-public java-powermock-reflect
+  (package
+    (name "java-powermock-reflect")
+    (version "1.7.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/powermock/powermock/"
+                                  "archive/powermock-" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sbgi5vqq7k72wzcdjb20s370vyd4hsbnx71pzb8ishml3gy7fwy"))
+              (patches
+                (search-patches "java-powermock-fix-java-files.patch"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-reflect.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-reflect/src/main/java"
+       #:test-dir "powermock-reflect/src/test"))
+    (inputs
+     `(("java-objenesis" ,java-objenesis)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("cglib" ,java-cglib)
+       ("asm" ,java-asm)
+       ("hamcrest" ,java-hamcrest-core)
+       ("assertj" ,java-assertj)))
+    (home-page "https://github.com/powermock/powermock")
+    (synopsis "Mock library extension framework")
+    (description "PowerMock is a framework that extends other mock libraries
+such as EasyMock with more powerful capabilities.  PowerMock uses a custom
+classloader and bytecode manipulation to enable mocking of static methods,
+constructors, final classes and methods, private methods, removal of static
+initializers and more.  By using a custom classloader no changes need to be
+done to the IDE or continuous integration servers which simplifies adoption.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/patches/java-powermock-fix-java-files.patch b/gnu/packages/patches/java-powermock-fix-java-files.patch
new file mode 100644
index 000000000..6b9581813
--- /dev/null
+++ b/gnu/packages/patches/java-powermock-fix-java-files.patch
@@ -0,0 +1,178 @@
+This patch fixes build issues caused by the java compiler not finding the
+correct types on some statements.
+
+From 1ac84b58b4383fa118d98c35956d722d11cf449e Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <[email-masked]>
+Date: Tue, 22 Aug 2017 20:40:27 +0200
+Subject: [PATCH] Fix java files.
+
+---
+ .../internal/impl/DelegatingPowerMockRunner.java   | 13 +++++++---
+ .../java/org/powermock/reflect/WhiteBoxTest.java   | 30 +++++++++++-----------
+ .../reflect/internal/proxy/ClassFactory.java       |  6 ++---
+ 3 files changed, 27 insertions(+), 22 deletions(-)
+
+diff --git a/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java b/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java
+index 301f854..caecbbd 100644
+--- a/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java
++++ b/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java
+@@ -98,12 +98,17 @@ implements PowerMockJUnitRunnerDelegate, Filterable {
+             @Override
+             public Runner call() throws Exception {
+                 try {
+-                    return Whitebox.invokeConstructor(
+-                            testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)
+-                            ? testClass.getAnnotation(PowerMockRunnerDelegate.class).value()
+-                            : PowerMockRunnerDelegate.DefaultJUnitRunner.class,
++                    if(testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)) {
++                        return Whitebox.invokeConstructor(
++                            testClass.getAnnotation(PowerMockRunnerDelegate.class).value(),
+                             new Class[] {Class.class},
+                             new Object[] {testClass});
++                    } else {
++                        return Whitebox.invokeConstructor(
++                            PowerMockRunnerDelegate.DefaultJUnitRunner.class,
++                            new Class[] {Class.class},
++                            new Object[] {testClass});
++                    }
+                 } catch (ConstructorNotFoundException rootProblem) {
+                     if (testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)
+                             && JUnitVersion.isGreaterThanOrEqualTo("4.5")) {
+diff --git a/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java b/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java
+index bf1e2e3..0d60487 100644
+--- a/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java
++++ b/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java
+@@ -248,7 +248,7 @@ public class WhiteBoxTest {
+ 
+     @Test
+     public void testMethodWithPrimitiveAndWrappedInt_primtive_wrapped() throws Exception {
+-        assertEquals(17, Whitebox.invokeMethod(new ClassWithPrivateMethods(), "methodWithPrimitiveAndWrappedInt",
++        assertEquals((Integer)17, Whitebox.invokeMethod(new ClassWithPrivateMethods(), "methodWithPrimitiveAndWrappedInt",
+                                                new Class[]{int.class, Integer.class}, 9, Integer.valueOf(8)));
+     }
+ 
+@@ -257,7 +257,7 @@ public class WhiteBoxTest {
+         int expected = 123;
+         Whitebox.setInternalState(ClassWithInternalState.class, "staticState", expected);
+         assertEquals(expected, ClassWithInternalState.getStaticState());
+-        assertEquals(expected, Whitebox.getInternalState(ClassWithInternalState.class, "staticState"));
++        assertEquals(expected, (int)Whitebox.getInternalState(ClassWithInternalState.class, "staticState"));
+     }
+ 
+ 	@Test
+@@ -334,25 +334,25 @@ public class WhiteBoxTest {
+     @Test
+     public void testInvokeVarArgsMethod_multipleValues() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(6, Whitebox.invokeMethod(tested, "varArgsMethod", 1, 2, 3));
++        assertEquals(6, (int)Whitebox.invokeMethod(tested, "varArgsMethod", 1, 2, 3));
+     }
+ 
+     @Test
+     public void testInvokeVarArgsMethod_noArguments() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(0, Whitebox.invokeMethod(tested, "varArgsMethod"));
++        assertEquals(0, (int)Whitebox.invokeMethod(tested, "varArgsMethod"));
+     }
+ 
+     @Test
+     public void testInvokeVarArgsMethod_oneArgument() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(4, Whitebox.invokeMethod(tested, "varArgsMethod", 2));
++        assertEquals(4, (int)Whitebox.invokeMethod(tested, "varArgsMethod", 2));
+     }
+ 
+     @Test
+     public void testInvokeVarArgsMethod_invokeVarArgsWithOneArgument() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(1, Whitebox.invokeMethod(tested, "varArgsMethod", new Class<?>[]{int[].class}, 1));
++        assertEquals(1, (int)Whitebox.invokeMethod(tested, "varArgsMethod", new Class<?>[]{int[].class}, 1));
+     }
+ 
+     @Test
+@@ -376,7 +376,7 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, value);
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
+     }
+ 
+     @Test
+@@ -387,8 +387,8 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, value);
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
+-        assertEquals(-1, Whitebox.getInternalState(tested, fieldName, ClassWithInternalState.class));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
++        assertEquals(-1, (int)Whitebox.getInternalState(tested, fieldName, ClassWithInternalState.class));
+     }
+ 
+     @Test(expected = IllegalArgumentException.class)
+@@ -398,7 +398,7 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, new Object());
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
+     }
+ 
+     @Test(expected = IllegalArgumentException.class)
+@@ -408,7 +408,7 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, (Object) null);
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
+     }
+ 
+     @Test
+@@ -417,8 +417,8 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState();
+         Whitebox.setInternalState(tested, int.class, value);
+         assertEquals(value, (int) Whitebox.getInternalState(tested, int.class));
+-        assertEquals(value, Whitebox.getInternalState(tested, "anotherInternalState"));
+-        assertEquals(value, Whitebox.getInternalState(tested, "anotherInternalState",
++        assertEquals(value, (int)Whitebox.getInternalState(tested, "anotherInternalState"));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, "anotherInternalState",
+                                                       ClassWithChildThatHasInternalState.class));
+     }
+ 
+@@ -429,7 +429,7 @@ public class WhiteBoxTest {
+         Whitebox.setInternalState(tested, int.class, value, ClassWithInternalState.class);
+         assertEquals(42, (int) Whitebox.getInternalState(tested, int.class));
+         assertEquals(value, (int) Whitebox.getInternalState(tested, int.class, ClassWithInternalState.class));
+-        assertEquals(value, Whitebox.getInternalState(tested, "staticState", ClassWithInternalState.class));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, "staticState", ClassWithInternalState.class));
+     }
+ 
+     @Test
+@@ -619,7 +619,7 @@ public class WhiteBoxTest {
+     @Test
+     public void testInvokeMethodWithBothNormalAndVarArgsParameter() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(4, Whitebox.invokeMethod(tested, "varArgsMethod2", 1, 2, 3));
++        assertEquals(4, (int)Whitebox.invokeMethod(tested, "varArgsMethod2", 1, 2, 3));
+     }
+ 
+     @Test
+diff --git a/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java b/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java
+index a5e5fda..14b8bbe 100644
+--- a/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java
++++ b/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java
+@@ -1,8 +1,8 @@
+ package org.powermock.reflect.internal.proxy;
+ 
+-import net.sf.cglib.asm.ClassWriter;
+-import net.sf.cglib.asm.MethodVisitor;
+-import net.sf.cglib.asm.Opcodes;
++import org.objectweb.asm.ClassWriter;
++import org.objectweb.asm.MethodVisitor;
++import org.objectweb.asm.Opcodes;
+ 
+ class ClassFactory implements Opcodes {
+     
+-- 
+2.14.1
+
-- 
2.14.3

>From 9abb44ce44f78c73fb396f19a00c7184f977781c Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 23:07:04 +0200
Subject: [PATCH 17/22] gnu: Add java-powermock-core.

* gnu/packages/java.scm (java-powermock-core): New variable.
---
 gnu/packages/java.scm | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index a77e76ee3..5161ab6f0 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6823,3 +6823,21 @@ constructors, final classes and methods, private methods, removal of static
 initializers and more.  By using a custom classloader no changes need to be
 done to the IDE or continuous integration servers which simplifies adoption.")
     (license license:asl2.0)))
+
+(define-public java-powermock-core
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-core")
+    (arguments
+     `(#:jar-name "java-powermock-core.jar"
+       #:source-dir "powermock-core/src/main/java"
+       #:test-dir "powermock-core/src/test"
+       #:tests? #f; requires powermock-api
+       #:jdk ,icedtea-8))
+    (inputs
+     `(("reflect" ,java-powermock-reflect)
+       ("javassist" ,java-jboss-javassist)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("assertj" ,java-assertj)
+       ("mockito" ,java-mockito-1)))))
-- 
2.14.3

>From 1b97f2c6508382eea93304d904a6edb3cf481a86 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 23:08:38 +0200
Subject: [PATCH 18/22] gnu: Add java-powermock-api-support.

* gnu/packages/java.scm (java-powermock-api-support): New variable.
---
 gnu/packages/java.scm | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 5161ab6f0..1e4c2506e 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6841,3 +6841,17 @@ done to the IDE or continuous integration servers which simplifies adoption.")
      `(("junit" ,java-junit)
        ("assertj" ,java-assertj)
        ("mockito" ,java-mockito-1)))))
+
+(define-public java-powermock-api-support
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-api-support")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-api-support.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-api/powermock-api-support/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("reflect" ,java-powermock-reflect)))))
-- 
2.14.3

>From bf3c6f0f7a8a9cacf7bdb331eba25d05d8f0ad3c Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 23:37:47 +0200
Subject: [PATCH 19/22] gnu: Add java-powermock-modules-junit4-common.

* gnu/packages/java.scm (java-powermock-modules-junit4-common): New
variable.
---
 gnu/packages/java.scm | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 1e4c2506e..82fd6567c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6855,3 +6855,20 @@ done to the IDE or continuous integration servers which simplifies adoption.")
     (inputs
      `(("core" ,java-powermock-core)
        ("reflect" ,java-powermock-reflect)))))
+
+(define-public java-powermock-modules-junit4-common
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-modules-junit4-common")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-modules-junit4-common.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-modules/powermock-module-junit4-common/src/main/java"
+       #:test-dir "powermock-modules/powermock-module-junit4-common/src/test"))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("easymock" ,java-easymock)
+       ("reflect" ,java-powermock-reflect)
+       ("hamcrest" ,java-hamcrest-core)
+       ("cglib" ,java-cglib)))))
-- 
2.14.3

>From bafaffa05b10b6ffa421896264f8ca57de0ea47a Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Wed, 25 Oct 2017 23:38:36 +0200
Subject: [PATCH 20/22] gnu: Add java-powermock-modules-junit4.

* gnu/packages/java.scm (java-powermock-modules-junit4): New variable.
---
 gnu/packages/java.scm | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 82fd6567c..aad89b38d 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6872,3 +6872,25 @@ done to the IDE or continuous integration servers which simplifies adoption.")
        ("reflect" ,java-powermock-reflect)
        ("hamcrest" ,java-hamcrest-core)
        ("cglib" ,java-cglib)))))
+
+(define-public java-powermock-modules-junit4
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-modules-junit4")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-modules-junit4.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-modules/powermock-module-junit4/src/main/java"
+       #:test-dir "powermock-modules/powermock-module-junit4/src/test"))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("reflect" ,java-powermock-reflect)
+       ("common" ,java-powermock-modules-junit4-common)
+       ("cglib" ,java-cglib)))
+    (native-inputs
+     `(("easymock" ,java-easymock)
+       ("hamcrest" ,java-hamcrest-core)
+       ("objenesis" ,java-objenesis)
+       ("asm" ,java-asm)
+       ("junit" ,java-junit)))))
-- 
2.14.3

>From acf289da757ac818563b32e2d98fdc9ec9ea1cd6 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Thu, 26 Oct 2017 00:06:55 +0200
Subject: [PATCH 21/22] gnu: Add java-powermock-api-easymock.

* gnu/packages/java.scm (java-powermock-api-easymock): New variable.
---
 gnu/packages/java.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index aad89b38d..7b20a509f 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -6894,3 +6894,30 @@ done to the IDE or continuous integration servers which simplifies adoption.")
        ("objenesis" ,java-objenesis)
        ("asm" ,java-asm)
        ("junit" ,java-junit)))))
+
+(define-public java-powermock-api-easymock
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-api-easymock")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-api-easymock.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-api/powermock-api-easymock/src/main/java"
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-file
+           (lambda _
+             ;; FIXME: This looks wrong, but it fixes a build error.
+             (with-directory-excursion "powermock-api/powermock-api-easymock"
+               (substitute* "src/main/java/org/powermock/api/easymock/PowerMock.java"
+                 (("classLoader instanceof MockClassLoader") "false")
+                 (("\\(\\(MockClassLoader\\) classLoader\\).*;") ";")))
+             #t)))))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("easymock" ,java-easymock)
+       ("reflect" ,java-powermock-reflect)
+       ("support" ,java-powermock-api-support)
+       ("cglib" ,java-cglib)))))
-- 
2.14.3

>From 49e607accf0f981e8a1c0df5914a9fd726d740cd Mon Sep 17 00:00:00 2001
From: Julien Lepiller <[email-masked]>
Date: Thu, 26 Oct 2017 00:24:17 +0200
Subject: [PATCH 22/22] gnu: Add java-plexus-classworlds.

* gnu/packages/java.scm (java-plexus-classworlds): New variable.
---
 gnu/packages/java.scm | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 7b20a509f..c65bddec3 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2319,6 +2319,32 @@ package within @code{plexus-utils}, but has been separated in order to allow
 these two libraries to vary independently of one another.")
     (license license:asl2.0)))
 
+(define-public java-plexus-classworlds
+  (package
+    (name "java-plexus-classworlds")
+    (version "2.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/"
+                                  "plexus-classworlds/archive/plexus-classworlds-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1qm4p0rl8d82lzhsiwnviw11jnq44s0gflg78zq152xyyr2xmh8g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-classworlds.jar"
+       #:source-dir "src/main"
+       #:tests? #f));; FIXME: we need to generate some resources as in pom.xml
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://codehaus-plexus.github.io/plexus-classworlds/")
+    (synopsis "Java class loader framework")
+    (description "Plexus classworlds replaces the native ClassLoader mechanism
+of Java.  It is especially usefull for dynamic loading of application
+components.")
+    (license license:asl2.0)))
+
 (define-public java-asm
   (package
     (name "java-asm")
-- 
2.14.3