gnu: python-deepmerge: Use pyproject-build-system.
[jackhill/guix/guix.git] / gnu / packages / maven.scm
index da1619b..b7794c4 100644 (file)
@@ -1,8 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018-2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2018-2022 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
@@ -38,7 +40,7 @@
 (define-public maven-resolver-api
   (package
     (name "maven-resolver-api")
-    (version "1.3.1")
+    (version "1.6.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -47,7 +49,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1x1gll8nkfl6zgnab78fxxvvhg42b2grxgdh1wp2h4qxsjkxg93d"))))
+                "0hbbbxj14qyq8pccyab96pjqq90jnjmid1pml9kx55c5smfpjn37"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "maven-resolver-api.jar"
@@ -58,7 +60,7 @@
          (replace 'install
            (install-from-pom "maven-resolver-api/pom.xml")))))
     (native-inputs
-     `(("java-asm" ,java-asm)
+     `(("java-asm-8" ,java-asm-8)
        ("java-cglib" ,java-cglib)
        ("java-hamcrest-core" ,java-hamcrest-core)
        ("java-junit" ,java-junit)
@@ -220,6 +222,7 @@ for repositories using URI-based layouts.")))
      (list maven-resolver-api
            maven-resolver-spi
            maven-resolver-util
+           java-commons-lang3
            java-eclipse-sisu-inject
            java-javax-inject
            java-guice
@@ -293,7 +296,7 @@ for repositories using URI-based layouts.")))
        ("maven-resolver-util" ,maven-resolver-util)
        ("java-javax-inject" ,java-javax-inject)
        ("mavne-wagon-provider-api" ,maven-wagon-provider-api)
-       ("java-plexus-component-annotation" ,java-plexus-component-annotations)
+       ("java-plexus-component-annotation" ,java-plexus-component-annotations-1.7)
        ("java-plexus-classworld" ,java-plexus-classworlds)
        ("java-plexus-plexus-util" ,java-plexus-utils)
        ("java-slf4j-api" ,java-slf4j-api)
@@ -305,7 +308,6 @@ for repositories using URI-based layouts.")))
            maven-resolver-test-util
            java-guava
            java-cglib
-           java-asm
            java-aopalliance
            java-guice))
     (synopsis "Transport implementation for Maven")
@@ -534,6 +536,89 @@ ease usage of the repository system.")))
      (list java-junit java-plexus-component-metadata
            java-sonatype-aether-test-util))))
 
+;; This slightly newer version is also required by some plugins
+(define-public java-sonatype-aether-api-1.13
+  (package
+    (name "java-sonatype-aether-api")
+    (version "1.13.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/sonatype/sonatype-aether")
+                     (commit (string-append "aether-" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yl34dqhm6ykb7h63gkssyrdxv3dsa3n5b8d8cvy8rh4qsm6p2yb"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "aether-api.jar"
+       #:source-dir "aether-api/src/main/java"
+       #:test-dir "aether-api/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'install-parent (install-pom-file "pom.xml"))
+         (replace 'install (install-from-pom "aether-api/pom.xml")))))
+    (propagated-inputs
+     `(("java-sonatype-forge-parent-pom" ,java-sonatype-forge-parent-pom-10)))
+    (native-inputs `(("java-junit" ,java-junit)))
+    (home-page "https://github.com/sonatype/sonatype-aether")
+    (synopsis "Maven repository system API")
+    (description "This package contains the API for the maven repository system.")
+    (license license:asl2.0)))
+
+(define-public java-sonatype-aether-spi-1.13
+  (package
+    (inherit java-sonatype-aether-api-1.13)
+    (name "java-sonatype-aether-spi")
+    (arguments
+     `(#:jar-name "aether-spi.jar"
+       #:source-dir "aether-spi/src/main/java"
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install (install-from-pom "aether-spi/pom.xml")))))
+    (propagated-inputs
+     `(("java-sonatype-aether-api" ,java-sonatype-aether-api-1.13)))
+    (synopsis "Maven repository system SPI")
+    (description "This package contains the service provider interface (SPI)
+for repository system implementations and repository connectors.")))
+
+(define-public java-sonatype-aether-test-util-1.13
+  (package
+    (inherit java-sonatype-aether-api-1.13)
+    (name "java-sonatype-aether-test-util")
+    (arguments
+     `(#:jar-name "java-sonatype-aether-test-util.jar"
+       #:source-dir "aether-test-util/src/main/java"
+       #:test-dir "aether-test-util/src/test"))
+    (inputs
+     `(("java-sonatype-aether-api" ,java-sonatype-aether-api-1.13)
+       ("java-sonatype-aether-spi" ,java-sonatype-aether-spi-1.13)))
+    (synopsis "Utility classes for testing the maven repository system")
+    (description "This package contains a collection of utility classes to
+ease testing of the repository system.")))
+
+(define-public java-sonatype-aether-util-1.13
+  (package
+    (inherit java-sonatype-aether-api-1.13)
+    (name "java-sonatype-aether-util")
+    (arguments
+     `(#:jar-name "aether-util.jar"
+       #:source-dir "aether-util/src/main/java"
+       #:test-dir "aether-util/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install (install-from-pom "aether-util/pom.xml")))))
+    (propagated-inputs
+     `(("java-sonatype-aether-api" ,java-sonatype-aether-api-1.13)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-sonatype-aether-test-util" ,java-sonatype-aether-test-util-1.13)))
+    (synopsis "Utility classes for the maven repository system")
+    (description "This package contains a collection of utility classes to
+ease usage of the repository system.")))
+
 ;; Again, this old version is required by some maven plugins
 (define-public java-eclipse-aether-api
   (package
@@ -727,14 +812,14 @@ replacement with improvements.")
 (define-public maven-wagon-provider-api
   (package
     (name "maven-wagon-provider-api")
-    (version "3.3.4")
+    (version "3.4.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.apache.org/dist/maven/wagon/"
                                   "wagon-" version "-source-release.zip"))
               (sha256
                (base32
-                "1iq9bilgfklzbxwwhzi3f19mkbaaf9dh9f83h3yz5gbmvypask9a"))))
+                "1rnviw0yr4g5902fb8pkd1gyvci4bz7hndjvhkqmnkj7ay0y6mf0"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "maven-wagon-provider-api.jar"
@@ -832,8 +917,8 @@ classes used in multiple maven-wagon components.")))
      (list java-plexus-utils maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+       ("java-plexus-component-metadata" ,java-plexus-component-metadata-1.7)
+       ("java-plexus-component-annotations" ,java-plexus-component-annotations-1.7)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
        ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
        ("java-plexus-classworlds" ,java-plexus-classworlds)
@@ -851,7 +936,6 @@ classes used in multiple maven-wagon components.")))
        ("java-commons-cli" ,java-commons-cli)
        ("java-qdox" ,java-qdox)
        ("java-jdom2" ,java-jdom2)
-       ("java-asm" ,java-asm)
        ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
        ,@(package-native-inputs maven-wagon-provider-api)))
     (synopsis "Wagon provider that gets and puts artifacts using the file system")
@@ -920,8 +1004,8 @@ Test Compatibility Kit.")))
            maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+       ("java-plexus-component-metadata" ,java-plexus-component-metadata-1.7)
+       ("java-plexus-component-annotations" ,java-plexus-component-annotations-1.7)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
        ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
        ("java-plexus-classworlds" ,java-plexus-classworlds)
@@ -939,7 +1023,6 @@ Test Compatibility Kit.")))
        ("java-commons-cli" ,java-commons-cli)
        ("java-qdox" ,java-qdox)
        ("java-jdom2" ,java-jdom2)
-       ("java-asm" ,java-asm)
        ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
        ,@(package-native-inputs maven-wagon-provider-api)))
     (synopsis "Shared Library for wagon providers supporting HTTP")
@@ -992,8 +1075,8 @@ wagon providers supporting HTTP.")))
            maven-wagon-provider-api))
     (native-inputs
      `(("maven-wagon-provider-test" ,maven-wagon-provider-test)
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+       ("java-plexus-component-metadata" ,java-plexus-component-metadata-1.7)
+       ("java-plexus-component-annotations" ,java-plexus-component-annotations-1.7)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
        ("java-plexus-container-default" ,java-plexus-container-default)
        ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
@@ -1007,12 +1090,12 @@ wagon providers supporting HTTP.")))
        ("java-plexus-cli" ,java-plexus-cli)
        ("maven-plugin-api" ,maven-plugin-api)
        ("maven-plugin-annotations" ,maven-plugin-annotations)
+       ("maven-slf4j-provider" ,maven-slf4j-provider)
        ("maven-core" ,maven-core)
        ("maven-model" ,maven-model)
        ("java-commons-cli" ,java-commons-cli)
        ("java-qdox" ,java-qdox)
        ("java-jdom2" ,java-jdom2)
-       ("java-asm" ,java-asm)
        ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
        ("java-javaee-servletapi" ,java-javaee-servletapi)
        ("java-eclipse-jetty-util-9.2" ,java-eclipse-jetty-util-9.2)
@@ -1026,7 +1109,6 @@ wagon providers supporting HTTP.")))
        ("java-commons-codec" ,java-commons-codec)
        ("java-commons-io" ,java-commons-io)
        ("java-jsoup" ,java-jsoup)
-       ("java-slf4j-simple" ,java-slf4j-simple)
        ,@(package-native-inputs maven-wagon-provider-api)))
     (synopsis "Wagon provider that gets and puts artifacts through HTTP(S)")
     (description "Maven Wagon is a transport abstraction that is used in Maven's
@@ -1037,13 +1119,13 @@ gets and puts artifacts through HTTP(S) using Apache HttpClient-4.x.")))
 (define maven-pom
   (package
     (name "maven-pom")
-    (version "3.6.1")
+    (version "3.8.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/maven/"
                                   "maven-3/" version "/source/"
                                   "apache-maven-" version "-src.tar.gz"))
-              (sha256 (base32 "0grw9zp166ci53rd7qkyy2qmwmik37xhiz1z84jpm0msyvzj2n82"))
+              (sha256 (base32 "0jszmcaxp597a62ajrc478jxix1qmw4pknhiygsbjdy3kccc7gvj"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1117,7 +1199,7 @@ gets and puts artifacts through HTTP(S) using Apache HttpClient-4.x.")))
          (replace 'install
            (install-pom-file "pom.xml")))))
     (propagated-inputs
-     `(("maven-parent-pom-33" ,maven-parent-pom-33)))
+     (list maven-parent-pom-35))
     (home-page "https://maven.apache.org/")
     (synopsis "Build system")
     (description "Apache Maven is a software project management and comprehension
@@ -1166,8 +1248,9 @@ and compares versions:")))
              (let ((file "maven-model/src/main/mdo/maven.mdo"))
                (modello-single-mode file "4.0.0" "java")
                (modello-single-mode file "4.0.0" "xpp3-reader")
+               (modello-single-mode file "4.0.0" "xpp3-extended-reader")
                (modello-single-mode file "4.0.0" "xpp3-writer")
-               (modello-single-mode file "4.0.0" "xpp3-extended-reader"))
+               (modello-single-mode file "4.0.0" "xpp3-extended-writer"))
              #t))
          (replace 'install (install-from-pom "maven-model/pom.xml")))))
     (propagated-inputs
@@ -1241,9 +1324,9 @@ setting, toolchains)")))
                        file mode "maven-settings/src/main/java" version
                        "false" "true"))
              (let ((file "maven-settings/src/main/mdo/settings.mdo"))
-               (modello-single-mode file "1.1.0" "java")
-               (modello-single-mode file "1.1.0" "xpp3-reader")
-               (modello-single-mode file "1.1.0" "xpp3-writer"))
+               (modello-single-mode file "1.2.0" "java")
+               (modello-single-mode file "1.2.0" "xpp3-reader")
+               (modello-single-mode file "1.2.0" "xpp3-writer"))
              #t))
          (replace 'install (install-from-pom "maven-settings/pom.xml")))))
     (propagated-inputs
@@ -1256,7 +1339,6 @@ setting, toolchains)")))
            java-plexus-component-annotations
            java-guice
            java-cglib
-           java-asm
            java-eclipse-sisu-inject
            java-javax-inject
            java-plexus-classworlds
@@ -1283,23 +1365,22 @@ simply plain java objects.")))
        #:test-dir "maven-settings-builder/src/test"
        #:phases
        (modify-phases %standard-phases
-         (add-before 'build 'generate-components.xml
+         (add-before 'build 'generate-sisu-named
            (lambda _
-             (mkdir-p "build/classes/META-INF/plexus")
-             (chmod "components.sh" #o755)
-             (invoke "./components.sh" "maven-settings-builder/src/main/java"
-                     "build/classes/META-INF/plexus/components.xml")
-             #t))
+             (mkdir-p "build/classes/META-INF/sisu")
+             (chmod "sisu.sh" #o755)
+             (invoke "./sisu.sh" "maven-settings-builder/src/main/java"
+                     "build/classes/META-INF/sisu/javax.inject.Named")))
          (replace 'install (install-from-pom "maven-settings-builder/pom.xml")))))
     (propagated-inputs
      (list java-plexus-utils
            java-plexus-interpolation
-           java-plexus-sec-dispatcher-1.4
+           java-plexus-sec-dispatcher
            maven-builder-support
            maven-settings
            maven-pom))
     (native-inputs
-     (list java-junit java-plexus-component-annotations))
+     (list java-junit java-javax-inject java-plexus-component-annotations))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains the effective model builder, with profile activation,
 inheritance, interpolation, @dots{}")))
@@ -1310,30 +1391,29 @@ inheritance, interpolation, @dots{}")))
     (name "maven-model-builder")
     (arguments
      `(#:jar-name "maven-model-builder.jar"
-       #:source-dir "maven-model-builder/src/main/java"
+       #:source-dir "src/main/java"
        #:jdk ,icedtea-8
-       #:test-dir "maven-model-builder/src/test"
+       #:test-dir "src/test"
        #:phases
        (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             ;; Required for tests that rely on the package's default
+             ;; locations, that reference ${basedir}/src/test.
+             (chdir "maven-model-builder")))
          (add-before 'build 'copy-resources
            (lambda _
-             (copy-recursively "maven-model-builder/src/main/resources"
+             (copy-recursively "src/main/resources"
                                "build/classes")
              #t))
-         (add-before 'build 'generate-components.xml
-           (lambda _
-             (mkdir-p "build/classes/META-INF/plexus")
-             (chmod "components.sh" #o755)
-             (invoke "./components.sh" "maven-model-builder/src/main/java"
-                     "build/classes/META-INF/plexus/components.xml")
-             #t))
-         (add-before 'check 'fix-paths
+         (add-before 'build 'generate-sisu-named
            (lambda _
-             (substitute* (find-files "maven-model-builder/src/test/java" ".*.java")
-               (("src/test") "maven-model-builder/src/test"))
-             #t))
+             (mkdir-p "build/classes/META-INF/sisu")
+             (chmod "../sisu.sh" #o755)
+             (invoke "../sisu.sh" "src/main/java"
+                     "build/classes/META-INF/sisu/javax.inject.Named")))
          (replace 'install
-           (install-from-pom "maven-model-builder/pom.xml")))))
+           (install-from-pom "pom.xml")))))
     (propagated-inputs
      (list java-plexus-interpolation
            java-plexus-utils
@@ -1346,9 +1426,10 @@ inheritance, interpolation, @dots{}")))
        ("java-guava" ,java-guava)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
        ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+       ("java-powermock-reflect" ,java-powermock-reflect)
+       ("java-objenesis" ,java-objenesis)
        ("guice" ,java-guice)
        ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
        ("sisu-inject" ,java-eclipse-sisu-inject)
        ("javax-inject" ,java-javax-inject)
        ("java-xmlunit" ,java-xmlunit)
@@ -1474,7 +1555,6 @@ so really just plain objects.")))
        ("java-plexus-component-annotations" ,java-plexus-component-annotations)
        ("guice" ,java-guice)
        ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
        ("sisu-inject" ,java-eclipse-sisu-inject)
        ("javax-inject" ,java-javax-inject)
        ("utils" ,java-plexus-utils)))
@@ -1569,7 +1649,7 @@ generally generated from plugin sources using maven-plugin-plugin.")))
          ("maven-plugin-api" ,maven-plugin-api)
          ("maven-repository-metadata" ,maven-repository-metadata)
          ("maven-shared-utils" ,maven-shared-utils)
-         ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+         ("java-plexus-component-annotations" ,java-plexus-component-annotations-1.7)
          ("java-plexus-utils" ,java-plexus-utils)
          ("java-commons-lang3" ,java-commons-lang3)
          ("java-guava" ,java-guava)
@@ -1585,7 +1665,6 @@ generally generated from plugin sources using maven-plugin-plugin.")))
       (native-inputs
        `(("java-modello-core" ,java-modello-core)
          ("java-cglib" ,java-cglib)
-         ("java-asm" ,java-asm)
          ("java-plexus-classworlds" ,java-plexus-classworlds)
          ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
          ("java-plexus-build-api" ,java-plexus-build-api)
@@ -1687,7 +1766,7 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap))))
                 (invoke "ant" "jar")
                 #t))))))
     (native-inputs
-     `(("java-plexus-component-metadata" ,java-plexus-component-metadata)
+     `(("java-plexus-component-metadata" ,java-plexus-component-metadata-1.7)
        ("java-commons-cli" ,java-commons-cli)
        ("java-plexus-cli" ,java-plexus-cli)
        ("java-jdom2" ,java-jdom2)
@@ -1695,6 +1774,42 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap))))
        ("maven-core-boot" ,maven-core-bootstrap)
        ,@(package-native-inputs maven-core-bootstrap)))))
 
+(define-public maven-slf4j-provider
+  (package
+    (inherit maven-artifact)
+    (name "maven-slf4j-provider")
+    (arguments
+     `(#:jar-name "maven-slf4j-provider.jar"
+       #:source-dir "maven-slf4j-provider/src/main/java"
+       #:tests? #f ;no tests
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'unpack-slf4j
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (mkdir-p "generated-sources")
+                      (copy-recursively (assoc-ref inputs
+                                                   "java-slf4j-simple-source")
+                                        "generated-sources")
+                      (with-directory-excursion "generated-sources"
+                        (for-each delete-file
+                                  (find-files "." "StaticLoggerBinder.java")))
+                      (for-each (lambda (simple)
+                                  (for-each (lambda (java)
+                                              (copy-file java
+                                                         (string-append
+                                                          "maven-slf4j-provider/src/main/java/org/slf4j/impl/"
+                                                          (basename java))))
+                                            (find-files (string-append simple
+                                                         "/src/main/java/")
+                                                        "\\.java$")))
+                                (find-files "generated-sources" "slf4j-simple"
+                                            #:directories? #t))))
+                  (replace 'install
+                    (install-from-pom "maven-slf4j-provider/pom.xml")))))
+    (inputs `(("java-slf4j-api" ,java-slf4j-api)
+              ("java-slf4j-simple-source" ,(package-source java-slf4j-simple))
+              ("maven-shared-utils" ,maven-shared-utils)))
+    (native-inputs (list unzip))))
+
 (define-public maven-embedder
   (package
     (inherit maven-artifact)
@@ -1714,6 +1829,10 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap))))
              (invoke "./sisu.sh" "maven-embedder/src/main/java"
                      "build/classes/META-INF/sisu/javax.inject.Named")
              #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes/")
+             (copy-recursively "maven-embedder/src/main/resources" "build/classes")))
          (add-before 'build 'generate-models
            (lambda* (#:key inputs #:allow-other-keys)
              (define (modello-single-mode file version mode)
@@ -1740,6 +1859,9 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap))))
                (("srcdir=\"maven-embedder/src/test\"")
                 "srcdir=\"maven-embedder/src/test/java\""))
              #t))
+         (add-before 'check 'disable-failing-test
+           (lambda _
+             (delete-file "maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java")))
          (add-before 'install 'fix-pom
            (lambda _
              (substitute* "maven-embedder/pom.xml"
@@ -1756,6 +1878,7 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap))))
        ("maven-settings" ,maven-settings)
        ("maven-settings-builder" ,maven-settings-builder)
        ("maven-shared-utils" ,maven-shared-utils)
+       ("maven-slf4j-provider" ,maven-slf4j-provider)
        ("java-plexus-classworlds" ,java-plexus-classworlds)
        ("java-plexus-util" ,java-plexus-utils)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
@@ -1773,16 +1896,15 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap))))
        ("java-guice" ,java-guice)
        ("java-javax-inject" ,java-javax-inject)
        ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
        ("java-jsr250" ,java-jsr250)))
     (native-inputs
-     `(("java-modello-core" ,java-modello-core)
+     `(("java-asm-8" ,java-asm-8)
+       ("java-modello-core" ,java-modello-core)
        ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
        ("java-plexus-build-api" ,java-plexus-build-api)
        ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus)
        ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject)
        ("java-cglib" ,java-cglib)
-       ("java-asm" ,java-asm)
        ("java-modello-plugins-java" ,java-modello-plugins-java)
        ("java-modello-plugins-xml" ,java-modello-plugins-xml)
        ("java-modello-plugins-xpp3" ,java-modello-plugins-xpp3)
@@ -1916,6 +2038,10 @@ logging support.")))
                (modello-single-mode file "1.0.0" "xpp3-reader")
                (modello-single-mode file "1.0.0" "xpp3-writer"))
              #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes/")
+             (copy-recursively "src/main/resources" "build/classes")))
          (add-after 'build 'generate-metadata
            (lambda _
              (invoke "java" "-cp" (string-append (getenv "CLASSPATH") ":build/classes")
@@ -1940,6 +2066,9 @@ logging support.")))
                      "--classes" "build/test-classes"
                      "--descriptors" "build/test-classes/META-INF")
              #t))
+         (add-before 'check 'disable-failing-test
+           (lambda _
+             (delete-file "src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java")))
          (add-after 'generate-metadata 'rebuild
            (lambda _
              (invoke "ant" "jar")
@@ -1964,7 +2093,7 @@ logging support.")))
     (native-inputs
      `(("java-modello-core" ,java-modello-core)
        ("java-plexus-utils" ,java-plexus-utils)
-       ("java-plexus-component-annotations" ,java-plexus-component-annotations)
+       ("java-plexus-component-annotations" ,java-plexus-component-annotations-1.7)
        ("java-plexus-classworlds" ,java-plexus-classworlds)
        ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
        ("java-plexus-build-api" ,java-plexus-build-api)
@@ -1979,7 +2108,7 @@ logging support.")))
        ("java-modello-plugins-xml" ,java-modello-plugins-xml)
        ("java-modello-plugins-xpp3" ,java-modello-plugins-xpp3)
        ;; metadata
-       ("java-plexus-component-metadata" ,java-plexus-component-metadata)
+       ("java-plexus-component-metadata" ,java-plexus-component-metadata-1.7)
        ("java-commons-cli" ,java-commons-cli)
        ("java-plexus-cli" ,java-plexus-cli)
        ("java-jdom2" ,java-jdom2)
@@ -1987,7 +2116,7 @@ logging support.")))
        ("java-qdox" ,java-qdox)
        ;; tests
        ("java-plexus-cipher" ,java-plexus-cipher)
-       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher-1.4)
+       ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher)
        ("java-jsr250" ,java-jsr250)
        ("java-cdi-api" ,java-cdi-api)
        ("java-junit" ,java-junit)
@@ -1997,8 +2126,8 @@ logging support.")))
        ("java-commons-lang3" ,java-commons-lang3)
        ("java-aop" ,java-aopalliance)
        ("maven-resolver-provider" ,maven-resolver-provider)
+       ("maven-slf4j-provider" ,maven-slf4j-provider)
        ("java-slf4j-api" ,java-slf4j-api)
-       ("java-slf4j-simple" ,java-slf4j-simple)
        ,@(package-inputs java-slf4j-api)))
     (description "Apache Maven is a software project management and comprehension
 tool.  This package contains Maven2 classes maintained as compatibility
@@ -2036,7 +2165,8 @@ layer for plugins that need to keep Maven2 compatibility.")))
                      "maven-repository-metadata" "maven-shared-utils" "maven-resolver-api"
                      "maven-resolver-spi" "maven-resolver-util" "maven-resolver-impl"
                      "maven-resolver-connector-basic" "maven-resolver-provider"
-                     "maven-resolver-transport-wagon" "maven-wagon-provider-api"
+                     "maven-resolver-transport-wagon" "maven-slf4j-provider"
+                     "maven-wagon-provider-api"
                      "maven-wagon-file" "maven-wagon-http" "java-commons-logging-minimal"
                      "java-httpcomponents-httpclient" "java-httpcomponents-httpcore"
                      "maven-wagon-http-shared" "maven-wagon-tck-http"
@@ -2046,8 +2176,7 @@ layer for plugins that need to keep Maven2 compatibility.")))
                      "java-plexus-utils" "java-plexus-interpolation"
                      "java-plexus-sec-dispatcher" "java-plexus-cipher" "java-guava"
                      "java-jansi" "java-jsr250" "java-cdi-api" "java-commons-cli"
-                     "java-commons-io" "java-commons-lang3" "java-slf4j-api"
-                     "java-slf4j-simple"))))
+                     "java-commons-io" "java-commons-lang3" "java-slf4j-api"))))
              (substitute* "apache-maven/src/bin/mvn"
                (("cygwin=false;")
                 (string-append
@@ -2093,6 +2222,7 @@ layer for plugins that need to keep Maven2 compatibility.")))
            maven-resolver-connector-basic
            maven-resolver-provider
            maven-resolver-transport-wagon
+           maven-slf4j-provider
            maven-wagon-provider-api
            maven-wagon-file
            maven-wagon-http
@@ -2105,7 +2235,7 @@ layer for plugins that need to keep Maven2 compatibility.")))
            java-guice
            java-aopalliance
            java-cglib
-           java-asm
+           java-asm-8
            java-eclipse-sisu-inject
            java-javax-inject
            java-plexus-component-annotations
@@ -2120,9 +2250,7 @@ layer for plugins that need to keep Maven2 compatibility.")))
            java-commons-cli
            java-commons-io
            java-commons-lang3
-           java-slf4j-api
-           ;; TODO: replace with maven-slf4j-provider
-           java-slf4j-simple))
+           java-slf4j-api))
     (propagated-inputs
      (list coreutils which))
     (description "Apache Maven is a software project management and comprehension
@@ -2242,6 +2370,16 @@ reporting or the build process.")))
     (inherit maven-settings-builder)
     (version (package-version maven-3.0-pom))
     (source (package-source maven-3.0-pom))
+    (arguments
+      (substitute-keyword-arguments (package-arguments maven-settings-builder)
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (add-before 'build 'generate-components.xml
+              (lambda _
+                (mkdir-p "build/classes/META-INF/plexus")
+                (chmod "components.sh" #o755)
+                (invoke "./components.sh" "maven-settings-builder/src/main/java"
+                        "build/classes/META-INF/plexus/components.xml")))))))
     (propagated-inputs
      `(("java-plexus-component-annotations" ,java-plexus-component-annotations)
        ,@(filter
@@ -2252,6 +2390,8 @@ reporting or the build process.")))
                  ("maven-pom" `("maven-pom" ,maven-3.0-pom))
                  ("maven-settings" `("maven-settings" ,maven-3.0-settings))
                  ("maven-builder-support" #f)
+                 ("java-plexus-sec-dispatcher"
+                  `("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher-1.4))
                  (_ input)))
              (package-propagated-inputs maven-settings-builder)))))))
 
@@ -2260,6 +2400,19 @@ reporting or the build process.")))
     (inherit maven-model-builder)
     (version (package-version maven-3.0-pom))
     (source (package-source maven-3.0-pom))
+    (arguments
+      (substitute-keyword-arguments (package-arguments maven-model-builder)
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (add-before 'build 'generate-components.xml
+              (lambda _
+                (mkdir-p "build/classes/META-INF/plexus")
+                (chmod "../components.sh" #o755)
+                (invoke "../components.sh" "src/main/java"
+                        "build/classes/META-INF/plexus/components.xml")))
+            (add-before 'check 'remove-failing-test
+              (lambda _
+                (delete-file "src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java")))))))
     (propagated-inputs
      `(("java-plexus-component-annotations" ,java-plexus-component-annotations)
        ,@(filter
@@ -2648,7 +2801,7 @@ Maven project dependencies.")
 (define-public maven-dependency-tree
   (package
     (name "maven-dependency-tree")
-    (version "3.0.1")
+    (version "3.1.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/maven/shared/"
@@ -2656,20 +2809,21 @@ Maven project dependencies.")
                                   "-source-release.zip"))
               (sha256
                (base32
-                "0mxfslxvcmjs13jl30zhcg672j970dzn6ihh79w9ajh6sfqmlds2"))))
+                "1vhcd3lmbyy8q61c37sqgbllqj4ypkxm344l6pb05mkchlyk5dy5"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "maven-dependency-tree.jar"
        #:source-dir "src/main/java"
+       #:tests? #f; no tests
        #:phases
        (modify-phases %standard-phases
          (replace 'install
            (install-from-pom "pom.xml")))))
     (propagated-inputs
      (list maven-3.0-core java-plexus-component-annotations
-           maven-parent-pom-30))
+           maven-parent-pom-34))
     (inputs
-     (list java-sonatype-aether-api java-sonatype-aether-util
+     (list java-sonatype-aether-api-1.13 java-sonatype-aether-util-1.13
            java-eclipse-aether-api java-eclipse-aether-util))
     (native-inputs
      (list unzip java-junit))
@@ -2752,16 +2906,14 @@ Maven project dependencies.")
 (define-public maven-enforcer-api
   (package
     (name "maven-enforcer-api")
-    (version "3.0.0-M3")
+    (version "3.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/maven/enforcer/"
                                   "enforcer-" version "-source-release.zip"))
               (sha256
                (base32
-                "014cwj0dqa69nnlzcin8pk9wsjmmg71vsbcpb16cibcjpm6h9wjg"))
-              (patches
-                (search-patches "maven-enforcer-api-fix-old-dependencies.patch"))))
+                "1479yp58jv788xc1jc2sbdxpajlbvwlk60639vd2h4s8r6x7naqh"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "maven-enforcer-api.jar"
@@ -2795,12 +2947,13 @@ Maven project dependencies.")
          (add-before 'install 'fix-pom-versions
            (lambda _
              (substitute* "pom.xml"
-               (("3.8.1") ,(package-version java-commons-lang3))
-               (("1.4.1") ,(package-version maven-resolver-util))
-               (("1.12") ,(package-version java-commons-codec))
-               (("<version>2.2</version>")
-                ,(string-append "<version>" (package-version maven-dependency-tree)
-                                "</version>")))))
+               (("<maven.version>.*</maven.version>")
+                ,(string-append "<maven.version>" (package-version maven)
+                                "</maven.version>"))
+               (("2.11.0") ,(package-version java-commons-io))
+               (("3.12.0") ,(package-version java-commons-lang3))
+               (("1.6.1") ,(package-version maven-resolver-util))
+               (("1.15") ,(package-version java-commons-codec)))))
          (replace 'install
            (install-pom-file "pom.xml")))))
     (propagated-inputs
@@ -2862,10 +3015,54 @@ Maven project dependencies.")
            maven-plugin-annotations
            maven-enforcer-parent-pom))))
 
+(define-public maven-sisu-plugin
+  (package
+    (name "maven-sisu-plugin")
+    (version "0.3.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/eclipse/sisu.mojos/")
+                    (commit (string-append "releases/" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "00hb7v6hz8jg0mgkj3cl0nmqz49za4k2a0rbjr4gdhy2m7f34sq3"))))
+    (build-system ant-build-system)
+    (arguments
+     (list #:jar-name "maven-sisu-plugin.jar"
+           #:source-dir "src"
+           #:tests? #f ;no tests
+           #:phases #~(modify-phases %standard-phases
+                        (add-before 'build 'generate-plugin.xml
+                          (generate-plugin.xml "pom.xml" "sisu"
+                           "src/main/java/org/eclipse/sisu/mojos/"
+                           (list (list "IndexMojo.java")
+                                 (list "MainIndexMojo.java")
+                                 (list "TestIndexMojo.java"))))
+                        (replace 'install
+                          (install-from-pom "pom.xml")))))
+    (propagated-inputs (list java-sonatype-oss-parent-pom-9))
+    (inputs (list maven-artifact
+                  maven-plugin-api
+                  maven-plugin-annotations
+                  maven-core
+                  maven-common-artifact-filters
+                  java-slf4j-nop
+                  java-eclipse-sisu-inject
+                  java-plexus-utils
+                  java-plexus-build-api
+                  java-slf4j-api))
+    (home-page "https://www.eclipse.org/sisu/")
+    (synopsis "Maven plugin that generates annotation indexes for Sisu")
+    (description "Maven plugin that generates annotation indexes for Sisu to
+avoid classpath scanning at runtime.")
+    (license license:epl1.0)))
+
 (define-public maven-artifact-transfer
   (package
     (name "maven-artifact-transfer")
-    (version "0.12.0")
+    (version "0.13.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/maven/shared/"
@@ -2873,7 +3070,7 @@ Maven project dependencies.")
                                   "-source-release.zip"))
               (sha256
                (base32
-                "0mkdjr3wnvaxqaq68sy7h4mqlq3xgwwp5s2anj5vbxfy4bsc1ivj"))))
+                "0xl7lkksljacrhmvwf924zb6h0h5zw9494jaz9cz4hll0lrhlpz6"))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f; require mockito 2
@@ -3738,3 +3935,80 @@ reports in two different file formats, plain text and xml.")))
     (description "This plugin provides the capability to build jars.  If you
 would like to sign jars please use the Maven Jarsigner Plugin instead.")
     (license license:asl2.0)))
+
+(define-public maven-doxia-sink-api
+  (package
+    (name "maven-doxia-sink-api")
+    (version "2.0.0-M2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitbox.apache.org/repos/asf/maven-doxia.git")
+                    (commit (string-append "doxia-" version))))
+              (file-name (git-file-name "doxia" version))
+              (sha256
+               (base32
+                "0jx96lg0hgjsrm8mynhac4hwh2hmgiwjpwpx2k03yr14040zcr48"))))
+    (build-system ant-build-system)
+    (propagated-inputs
+     (list maven-doxia-parent-pom))
+    (arguments
+     `(#:jar-name "doxia-sink-api.jar"
+       #:source-dir "doxia-sink-api/src/main/java"
+       #:tests? #f ; no tests
+       #:phases (modify-phases %standard-phases
+                  (replace 'install
+                    (install-from-pom "doxia-sink-api/pom.xml")))))
+    (home-page "https://maven.apache.org/doxia/index.html")
+    (synopsis "Generic markup language interface")
+    (description
+     "The @code{Sink} interface is a generic markup language
+interface provided as a Java API.  It contains several methods that
+encapsulate common text syntax.  A start tag is denoted by @code{xxxx()}
+method and a end of tag by @code{xxxx_()} method.")
+    (license license:asl2.0)))
+
+(define maven-doxia-parent-pom
+  (package
+    (inherit maven-doxia-sink-api)
+    (name "maven-doxia-parent-pom")
+    (arguments
+     `(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (delete 'build)
+                  (replace 'install
+                    (install-pom-file "pom.xml")))))
+    (propagated-inputs
+     (list maven-parent-pom-34))
+    (synopsis "Content generation framework")
+    (description "@samp{Doxia} is a content generation framework that provides
+powerful techniques for generating static and dynamic content, supporting a
+variety of markup languages.")))
+
+(define-public maven-doxia-core
+  (package
+    (inherit maven-doxia-sink-api)
+    (name "maven-doxia-core")
+    (arguments
+     `(#:jar-name "doxia-core.jar"
+       #:source-dir "doxia-core/src/main/java"
+       #:test-dir "doxia-core/src/test/java"
+       #:tests? #f ; tests require JUnit5
+       #:phases (modify-phases %standard-phases
+                  (replace 'install
+                    (install-from-pom "doxia-core/pom.xml")))))
+    (propagated-inputs (list maven-doxia-parent-pom
+                             maven-doxia-sink-api
+                             java-slf4j-api
+                             java-javax-inject
+                             java-plexus-utils
+                             java-eclipse-sisu-plexus
+                             java-commons-text))
+    (synopsis "Doxia core classes and interfaces")
+    (description
+     "Doxia is a content generation framework that provides powerful
+techniques for generating static and dynamic content, supporting a variety of
+markup languages.
+
+This package contains Doxia core classes and interfaces.")))