[PATCH] gnu: java-jmh: Switch to maven-build-system.

OpenSubmitted by Julien Lepiller.
Details
One participant
  • Julien Lepiller
Owner
unassigned
Severity
normal
J
J
Julien Lepiller wrote on 1 Jun 00:41 +0200
(address . guix-patches@gnu.org)
20210601004100.69baa2d0@tachikoma.lepiller.eu
Hi Guix!
I'm excited to submit this patch series, as it adds the first packageto guix that uses the maven-build-system.
The series first improves the maven build system, so it actually workswith jmh :)
The series then changes a few dependencies to install to the mavenrepository structure (lib/m2), so they can be detected by maven duringthe build.
Since the series updates files that are used by the ant-build-system,it unfortunately needs to update all java packages. Grepping for"build-system ant-build-system", it shows 302 packages, which istwo packages above the limit for master. However, since most javapackages are fast to build, I'd like to ask for an exception to thisrule and push to master directly.
Patches will follow :)
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 01/14] guix: java-utils: Factorize pom.xml generation.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-1-julien@lepiller.eu
* guix/build/java-utils.scm (generate-pom.xml): New procedure.* gnu/packages/maven.scm (java-surefire-junit4): Use it.* gnu/packages/java.scm (java-qdox, java-jsr250, java-jsr305)(java-aopalliance, java-jboss-el-api-spec)(java-jboss-interceptors-api-spec): Use it.(java-qdox-M9): Ensure the generated pom file has the correct version.--- gnu/packages/java.scm | 117 ++++++-------------------------------- gnu/packages/maven.scm | 28 ++++----- guix/build/java-utils.scm | 29 ++++++++++ 3 files changed, 58 insertions(+), 116 deletions(-)
Toggle diff (280 lines)diff --git a/gnu/packages/java.scm b/gnu/packages/java.scmindex a167aafc38..d7118b4ce6 100644--- a/gnu/packages/java.scm+++ b/gnu/packages/java.scm@@ -3781,25 +3781,11 @@ documentation tools.") (arguments `(#:jar-name "qdox.jar" #:tests? #f; no tests- #:modules- ((guix build ant-build-system)- (guix build java-utils)- (guix build utils)- (sxml simple)) #:phases (modify-phases %standard-phases (add-before 'install 'create-pom- (lambda _- (with-output-to-file "pom.xml"- (lambda _- (sxml->xml- `((project- (modelVersion "4.0.0")- (name "QDox")- (groupId "com.thoughtworks.qdox")- (artifactId "qdox")- (version ,,version))))))- #t))+ (generate-pom.xml "pom.xml" "com.thoughtworks.qdox" "qdox" ,version+ #:name "QDox")) (replace 'install (install-from-pom "pom.xml"))))) (home-page "https://github.com/codehaus/qdox")@@ -3825,7 +3811,14 @@ documentation tools.") "/qdox-" version "-sources.jar")) (sha256 (base32- "1s2jnmx2dkwnaha12lcj26aynywgwa8sslc47z82wx8xai13y4fg"))))))+ "1s2jnmx2dkwnaha12lcj26aynywgwa8sslc47z82wx8xai13y4fg"))))+ (arguments+ (substitute-keyword-arguments (package-arguments java-qdox)+ ((#:phases phases)+ `(modify-phases ,phases+ (replace 'create-pom+ (generate-pom.xml "pom.xml" "com.thoughtworks.qdox" "qdox" ,version+ #:name "QDox")))))))) (define-public java-jarjar (package@@ -6397,25 +6390,11 @@ bottlenecks move away from the database in an effectively cached system.") `(#:tests? #f ; no tests included #:jdk ,icedtea-8 #:jar-name "jsr250.jar"- #:modules ((guix build ant-build-system)- (guix build utils)- (guix build maven pom)- (guix build java-utils)- (sxml simple)) #:phases (modify-phases %standard-phases (add-before 'install 'create-pom- (lambda _- (with-output-to-file "pom.xml"- (lambda _- (sxml->xml- `((project- (modelVersion "4.0.0")- (name "jsr250")- (groupId "javax.annotation")- (artifactId "jsr250-api")- (version ,,version))))))- #t))+ (generate-pom.xml "pom.xml" "javax.annotation" "jsr250-api" ,version+ #:name "jsr250")) (replace 'install (install-from-pom "pom.xml"))))) (home-page "https://jcp.org/en/jsr/detail?id=250")@@ -6444,25 +6423,10 @@ namespaces.") (arguments `(#:tests? #f ; no tests included #:jar-name "jsr305.jar"- #:modules ((guix build ant-build-system)- (guix build java-utils)- (guix build maven pom)- (guix build utils)- (sxml simple)) #:phases (modify-phases %standard-phases (add-before 'install 'create-pom- (lambda _- (with-output-to-file "pom.xml"- (lambda _- (sxml->xml- `((project- (modelVersion "4.0.0")- (name "jsr305")- (groupId "com.google.code.findbugs")- (artifactId "jsr305")- (version ,,version))))))- #t))+ (generate-pom.xml "pom.xml" "com.google.code.findbugs" "jsr305" ,version)) (replace 'install (install-from-pom "pom.xml"))))) (home-page "http://findbugs.sourceforge.net/")@@ -10493,25 +10457,10 @@ this is not a static analysis tool.)") #:jdk ,icedtea-8 #:tests? #f; no tests #:source-dir "aopalliance/src/main"- #:modules ((guix build ant-build-system)- (guix build utils)- (guix build maven pom)- (guix build java-utils)- (sxml simple)) #:phases (modify-phases %standard-phases (add-before 'install 'create-pom- (lambda _- (with-output-to-file "pom.xml"- (lambda _- (sxml->xml- `((project- (modelVersion "4.0.0")- (name "aopalliance")- (groupId "aopalliance")- (artifactId "aopalliance")- (version "1.0"))))))- #t))+ (generate-pom.xml "pom.xml" "aopalliance" "aopalliance" ,version)) (replace 'install (install-from-pom "pom.xml"))))) (home-page "http://aopalliance.sourceforge.net")@@ -12110,29 +12059,14 @@ sequences to format your console output which works on every platform.") (build-system ant-build-system) (arguments `(#:jar-name "java-jboss-el-api_spec.jar"- #:modules ((guix build ant-build-system)- (guix build utils)- (guix build maven pom)- (guix build java-utils)- (sxml simple)) #:phases (modify-phases %standard-phases ;; the origin of javax.el:javax.el-api is unknown, so we use this package ;; instead, which implements the same thing. We override the pom file ;; to "rename" the package so it can be found by maven. (add-before 'install 'override-pom- (lambda _- (delete-file "pom.xml")- (with-output-to-file "pom.xml"- (lambda _- (sxml->xml- `(project- (modelVersion "4.0.0")- (name "el-api")- (groupId "javax.el")- (artifactId "javax.el-api")- (version "3.0")))))- #t))+ (generate-pom.xml "pom.xml" "javax.el" "javax.el-api" "3.0"+ #:name "el-api")) (replace 'install (install-from-pom "pom.xml"))))) (inputs@@ -12164,11 +12098,6 @@ JavaServer Pages (JSP).") #:jdk ,icedtea-8 #:source-dir "." #:tests? #f; no tests- #:modules ((guix build ant-build-system)- (guix build utils)- (guix build maven pom)- (guix build java-utils)- (sxml simple)) #:phases (modify-phases %standard-phases ;; the origin of javax.interceptor:javax.interceptor-api is unknown,@@ -12176,18 +12105,8 @@ JavaServer Pages (JSP).") ;; We override the pom file to "rename" the package so it can be found ;; by maven. (add-before 'install 'override-pom- (lambda _- (delete-file "pom.xml")- (with-output-to-file "pom.xml"- (lambda _- (sxml->xml- `(project- (modelVersion "4.0.0")- (name "interceptor-api")- (groupId "javax.interceptor")- (artifactId "javax.interceptor-api")- (version "3.0")))))- #t))+ (generate-pom.xml "pom.xml" "javax.interceptor" "javax.interceptor-api"+ "3.0" #:name "interceptor-api")) (replace 'install (install-from-pom "pom.xml"))))) (home-page "https://github.com/jboss/jboss-interceptors-api_spec")diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scmindex c637e5c7ae..8f63ee9be2 100644--- a/gnu/packages/maven.scm+++ b/gnu/packages/maven.scm@@ -3424,23 +3424,17 @@ starting from JUnit 4."))) #:phases (modify-phases %standard-phases (add-before 'install 'regenerate-own-pom- (lambda _- ;; Surefire struggles resolving artifacts because of this pom- ;; file, resulting in a NullPointerException when collecting- ;; Artifacts (and a "Failure detected." message from- ;; DefaultArtifactResolver). Replace the pom file with a much- ;; simpler one. Everything is shaded anyway (as used to be the- ;; case in 2.22), so there will not be missing dependencies.- (with-output-to-file "surefire-providers/surefire-junit4/pom.xml"- (lambda _- (sxml->xml- `((project- (modelVersion "4.0.0")- (name "Surefire JUnit4")- (groupId "org.apache.maven.surefire")- (artifactId "surefire-junit4")- (version ,,(package-version java-surefire-common-java5)))))))- #t))+ ;; Surefire struggles resolving artifacts because of this pom+ ;; file, resulting in a NullPointerException when collecting+ ;; Artifacts (and a "Failure detected." message from+ ;; DefaultArtifactResolver). Replace the pom file with a much+ ;; simpler one. Everything is shaded anyway (as used to be the+ ;; case in 2.22), so there will not be missing dependencies.+ (generate-pom.xml+ "surefire-providers/surefire-junit4/pom.xml"+ "org.apache.maven.surefire" "surefire-junit4"+ ,(package-version java-surefire-common-java5)+ #:name "Surefire JUnit4")) (add-before 'build 'copy-resources (lambda _ (mkdir-p "build/classes")diff --git a/guix/build/java-utils.scm b/guix/build/java-utils.scmindex a868e4d52c..6abd97e118 100644--- a/guix/build/java-utils.scm+++ b/guix/build/java-utils.scm@@ -28,6 +28,7 @@ #:use-module (sxml simple) #:export (ant-build-javadoc generate-plugin.xml+ generate-pom.xml install-jars install-javadoc install-pom-file@@ -206,3 +207,31 @@ recognize the package as a plugin, and find the entry points in the plugin." ,mojos (dependencies ,@dependencies)))))))))++(define* (generate-pom.xml pom-file groupid artifactid version+ #:key (dependencies '())+ (name artifactid))+ "Generates the @file{pom.xml} for a project. It is required by Maven to find+a package, and by the java build system to know where to install a package, when+a pom.xml doesn't already exist and installing to the maven repository."+ (lambda _+ (mkdir-p (dirname pom-file))+ (with-output-to-file pom-file+ (lambda _+ (sxml->xml+ (sxml-indent+ `(project+ (modelVersion "4.0.0")+ (name ,name)+ (groupId ,groupid)+ (artifactId ,artifactid)+ (version ,version)+ (dependencies+ ,@(map+ (match-lambda+ ((groupid artifactid version)+ `(dependency+ (groupId ,groupid)+ (artifactId ,artifactid)+ (version ,version))))+ dependencies)))))))))-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 02/14] guix: maven: Simplify finding version and group information.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-2-julien@lepiller.eu
* guix/build/maven/pom.scm (pom-version, pom-groupid): Do not use inputsand local packages information anymore. Adapt file to new arguments.* guix/build/maven-build-system.scm: Adapt to new arguments.* guix/build/java-utils.scm: Adapt to new arguments.--- guix/build/java-utils.scm | 18 +++++++++--------- guix/build/maven-build-system.scm | 6 +++--- guix/build/maven/pom.scm | 26 ++++++++++++-------------- 3 files changed, 24 insertions(+), 26 deletions(-)
Toggle diff (171 lines)diff --git a/guix/build/java-utils.scm b/guix/build/java-utils.scmindex 6abd97e118..5a54a14c1b 100644--- a/guix/build/java-utils.scm+++ b/guix/build/java-utils.scm@@ -2,7 +2,7 @@ ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>-;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>+;;; Copyright © 2020, 2021 Julien Lepiller <julien@lepiller.eu> ;;; ;;; This file is part of GNU Guix. ;;;@@ -69,9 +69,9 @@ fetched." (let* ((out (assoc-ref outputs "out")) (java-inputs (append (map cdr inputs) (map cdr outputs))) (pom-content (get-pom pom-file))- (version (pom-version pom-content java-inputs))+ (version (pom-version pom-content)) (artifact (pom-artifactid pom-content))- (group (group->dir (pom-groupid pom-content java-inputs)))+ (group (group->dir (pom-groupid pom-content))) (repository (string-append out "/lib/m2/" group "/" artifact "/" version "/")) (pom-name (string-append repository artifact "-" version ".pom")))@@ -87,8 +87,8 @@ to ensure that maven can find dependencies." (manifest (string-append dir "/META-INF/MANIFEST.MF")) (pom (get-pom pom-file)) (artifact (pom-artifactid pom))- (group (pom-groupid pom inputs))- (version (pom-version pom inputs))+ (group (pom-groupid pom))+ (version (pom-version pom)) (pom-dir (string-append "META-INF/maven/" group "/" artifact))) (mkdir-p (string-append dir "/" pom-dir)) (copy-file pom-file (string-append dir "/" pom-dir "/pom.xml"))@@ -113,9 +113,9 @@ the phase fails." (let* ((out (assoc-ref outputs "out")) (java-inputs (append (map cdr inputs) (map cdr outputs))) (pom-content (get-pom pom-file))- (version (pom-version pom-content java-inputs))+ (version (pom-version pom-content)) (artifact (pom-artifactid pom-content))- (group (group->dir (pom-groupid pom-content java-inputs)))+ (group (group->dir (pom-groupid pom-content))) (repository (string-append out "/lib/m2/" group "/" artifact "/" version "/")) ;; We try to find the file that was built. If it was built from our@@ -180,9 +180,9 @@ recognize the package as a plugin, and find the entry points in the plugin." (name (pom-name pom-content)) (description (pom-description pom-content)) (dependencies (pom-dependencies pom-content))- (version (pom-version pom-content java-inputs))+ (version (pom-version pom-content)) (artifact (pom-artifactid pom-content))- (groupid (pom-groupid pom-content java-inputs))+ (groupid (pom-groupid pom-content)) (mojos `(mojos ,@(with-directory-excursion directorydiff --git a/guix/build/maven-build-system.scm b/guix/build/maven-build-system.scmindex 534b4ebcee..0456bfdf61 100644--- a/guix/build/maven-build-system.scm+++ b/guix/build/maven-build-system.scm@@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU-;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>+;;; Copyright © 2020, 2021 Julien Lepiller <julien@lepiller.eu> ;;; ;;; This file is part of GNU Guix. ;;;@@ -82,8 +82,8 @@ (let* ((pom (get-pom pom-file)) (java-inputs (map cdr inputs)) (artifact (pom-artifactid pom))- (group (pom-groupid pom java-inputs local-packages))- (version (pom-version pom java-inputs local-packages)))+ (group (pom-groupid pom))+ (version (pom-version pom))) (let loop ((modules (pom-ref pom "modules")) (local-packages (add-local-package local-packages group artifact version)))diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scmindex c92d409d2b..327d5f75e8 100644--- a/guix/build/maven/pom.scm+++ b/guix/build/maven/pom.scm@@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU-;;; Copyright © 2019, 2020 Julien Lepiller <julien@lepiller.eu>+;;; Copyright © 2019-2021 Julien Lepiller <julien@lepiller.eu> ;;; ;;; This file is part of GNU Guix. ;;;@@ -93,13 +93,12 @@ If no result is found, the result is @code{#f}." (get-pom (car java-inputs)))) #f))) -(define* (pom-groupid content inputs #:optional local-packages)+(define* (pom-groupid content) "Find the groupID of a pom file, potentially looking at its parent pom file. See @code{find-parent} for the meaning of the arguments." (if content (let ((res (or (pom-ref content "groupId")- (pom-groupid (find-parent content inputs local-packages)- inputs))))+ (pom-ref (pom-ref content "parent") "groupId")))) (cond ((string? res) res) ((null? res) #f)@@ -114,13 +113,12 @@ See @code{find-parent} for the meaning of the arguments." (car res) #f))) -(define* (pom-version content inputs #:optional local-packages)+(define* (pom-version content) "Find the version of a pom file, potentially looking at its parent pom file. See @code{find-parent} for the meaning of the arguments." (if content (let ((res (or (pom-ref content "version")- (pom-version (find-parent content inputs local-packages)- inputs))))+ (pom-ref (pom-ref content "parent") "version")))) (cond ((string? res) res) ((null? res) #f)@@ -344,7 +342,7 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." ((tag rest ...) (match tag (('http://maven.apache.org/POM/4.0.0:plugin plugin ...)- (let ((group (or (pom-groupid plugin inputs) "org.apache.maven.plugins"))+ (let ((group (or (pom-groupid plugin) "org.apache.maven.plugins")) (artifact (pom-artifactid plugin))) (if (member artifact (or (assoc-ref excludes group) '())) (fix-plugins rest optional?)@@ -355,11 +353,11 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." (define* (fix-plugin plugin #:optional optional?) (let* ((artifact (pom-artifactid plugin))- (group (or (pom-groupid plugin inputs) "org.apache.maven.plugins"))+ (group (or (pom-groupid plugin) "org.apache.maven.plugins")) (version (or (assoc-ref (assoc-ref local-packages group) artifact) (find-version inputs group artifact optional?)- (pom-version plugin inputs))))- (if (pom-version plugin inputs)+ (pom-version plugin))))+ (if (pom-version plugin) (map (lambda (tag) (match tag@@ -373,7 +371,7 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." (define* (fix-dep dep #:optional optional?) (let* ((artifact (pom-artifactid dep))- (group (or (pom-groupid dep inputs) (pom-groupid pom inputs)))+ (group (or (pom-groupid dep) (pom-groupid pom))) (scope (pom-ref dep "scope")) (is-optional? (equal? (pom-ref dep "optional") '("true")))) (format (current-error-port) "maven: ~a:~a :: ~a (optional: ~a)~%"@@ -382,8 +380,8 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." with-build-dependencies?) (let ((version (or (assoc-ref (assoc-ref local-packages group) artifact) (find-version inputs group artifact optional?)- (pom-version dep inputs))))- (if (pom-version dep inputs)+ (pom-version dep))))+ (if (pom-version dep) (map (lambda (tag) (match tag-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 03/14] guix: maven: Simplify finding local packages and modules.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-3-julien@lepiller.eu
* guix/build/maven-build-system (fix-pom): Fix a single pom file withoutrecursing(fix-pom-files): Find local packages and all submodules, and fix themall at once.(add-local-package): Move to...* guix/build/maven/pom.scm (add-local-package): ...here.(pom-and-submodules, pom-local-packages): New procedures.--- guix/build/maven-build-system.scm | 41 +++++------------------- guix/build/maven/pom.scm | 53 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 34 deletions(-)
Toggle diff (142 lines)diff --git a/guix/build/maven-build-system.scm b/guix/build/maven-build-system.scmindex 0456bfdf61..374fa2fdb8 100644--- a/guix/build/maven-build-system.scm+++ b/guix/build/maven-build-system.scm@@ -60,47 +60,22 @@ (invoke "mvn" "-v") #t) -(define (add-local-package local-packages group artifact version)- (define (alist-set lst key val)- (match lst- ('() (list (cons key val)))- (((k . v) lst ...)- (if (equal? k key)- (cons (cons key val) lst)- (cons (cons k v) (alist-set lst key val))))))- (alist-set local-packages group- (alist-set (or (assoc-ref local-packages group) '()) artifact- version)))- (define (fix-pom pom-file inputs local-packages excludes) (chmod pom-file #o644) (format #t "fixing ~a~%" pom-file) (fix-pom-dependencies pom-file (map cdr inputs) #:with-plugins? #t #:with-build-dependencies? #t #:local-packages local-packages- #:excludes excludes)- (let* ((pom (get-pom pom-file))- (java-inputs (map cdr inputs))- (artifact (pom-artifactid pom))- (group (pom-groupid pom))- (version (pom-version pom)))- (let loop ((modules (pom-ref pom "modules"))- (local-packages- (add-local-package local-packages group artifact version)))- (pk 'local-packages local-packages)- (match modules- (#f local-packages)- ('() local-packages)- (((? string? _) modules ...)- (loop modules local-packages))- (((_ module) modules ...)- (loop- modules- (fix-pom (string-append (dirname pom-file) "/" module "/pom.xml")- inputs local-packages excludes)))))))+ #:excludes excludes)) (define* (fix-pom-files #:key inputs local-packages exclude #:allow-other-keys)- (fix-pom "pom.xml" inputs local-packages exclude)+ (let ((local-packages (pom-local-packages "pom.xml" #:local-packages local-packages)))+ (format (current-error-port) "Fix pom files with local packages: ~a~%" local-packages)+ (for-each+ (lambda (pom)+ (when (file-exists? pom)+ (fix-pom pom inputs local-packages exclude)))+ (pom-and-submodules "pom.xml"))) #t) (define* (build #:key outputs #:allow-other-keys)diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scmindex 327d5f75e8..8f16cf4d26 100644--- a/guix/build/maven/pom.scm+++ b/guix/build/maven/pom.scm@@ -21,7 +21,8 @@ #:use-module (system foreign) #:use-module (ice-9 match) #:use-module (srfi srfi-1)- #:export (get-pom+ #:export (add-local-package+ get-pom pom-ref pom-description pom-name@@ -30,8 +31,24 @@ pom-groupid pom-dependencies group->dir+ pom-and-submodules+ pom-local-packages fix-pom-dependencies)) +(define (add-local-package local-packages group artifact version)+ "Takes @var{local-packages}, a list of local packages, and adds a new one+for @var{group}:@var{artifact} at @var{version}."+ (define (alist-set lst key val)+ (match lst+ ('() (list (cons key val)))+ (((k . v) lst ...)+ (if (equal? k key)+ (cons (cons key val) lst)+ (cons (cons k v) (alist-set lst key val))))))+ (alist-set local-packages group+ (alist-set (or (assoc-ref local-packages group) '()) artifact+ version)))+ (define (get-pom file) "Return the content of a @file{.pom} file." (let ((pom-content (call-with-input-file file xml->sxml)))@@ -234,6 +251,40 @@ to re-declare the namespaces in the top-level element." http://maven.apache.org/xsd/maven-4.0.0.xsd")) ,(map fix-xml sxml))))) +(define (pom-and-submodules pom-file)+ "Given @var{pom-file}, the file name of a pom, return the list of pom file+names that correspond to itself and its submodules, recursively."+ (define (get-modules modules)+ (match modules+ (#f '())+ ('() '())+ (((? string? _) rest ...) (get-modules rest))+ ((('http://maven.apache.org/POM/4.0.0:module mod) rest ...)+ (let ((pom (string-append (dirname pom-file) "/" mod "/pom.xml")))+ (if (file-exists? pom)+ (cons pom (get-modules rest))+ (get-modules rest))))))++ (let* ((pom (get-pom pom-file))+ (modules (get-modules (pom-ref pom "modules"))))+ (cons pom-file+ (apply append (map pom-and-submodules modules)))))++(define* (pom-local-packages pom-file #:key (local-packages '()))+ "Given @var{pom-file}, a pom file name, return a list of local packages that+this repository contains."+ (let loop ((modules (pom-and-submodules pom-file))+ (local-packages local-packages))+ (match modules+ (() local-packages)+ ((module modules ...)+ (let* ((pom (get-pom module))+ (version (pom-version pom))+ (artifactid (pom-artifactid pom))+ (groupid (pom-groupid pom)))+ (loop modules+ (add-local-package local-packages groupid artifactid version)))))))+ (define (group->dir group) "Convert a group ID to a directory path." (string-join (string-split group #\.) "/"))-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 04/14] guix: maven: Support fixing extensions.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-4-julien@lepiller.eu
* guix/build/maven/pom.scm (fix-pom-dependencies): Add support for fixingextension versions.--- guix/build/maven/pom.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
Toggle diff (34 lines)diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scmindex 8f16cf4d26..3a4ad7a216 100644--- a/guix/build/maven/pom.scm+++ b/guix/build/maven/pom.scm@@ -374,8 +374,27 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." `((http://maven.apache.org/POM/4.0.0:plugins ,(fix-plugins plugins)) ,@(fix-build rest)))+ (('http://maven.apache.org/POM/4.0.0:extensions extensions ...)+ `((http://maven.apache.org/POM/4.0.0:extensions+ ,(fix-extensions extensions))+ ,@(fix-build rest))) (tag (cons tag (fix-build rest))))))) + (define* (fix-extensions extensions #:optional optional?)+ (match extensions+ ('() '())+ ((tag rest ...)+ (match tag+ (('http://maven.apache.org/POM/4.0.0:extension extension ...)+ (let ((group (or (pom-groupid extension) "org.apache.maven.plugins"))+ (artifact (pom-artifactid extension)))+ (if (member artifact (or (assoc-ref excludes group) '()))+ (fix-extensions rest optional?)+ `((http://maven.apache.org/POM/4.0.0:extension+ ,(fix-plugin extension optional?)); extensions are similar to plugins+ ,@(fix-extensions rest optional?)))))+ (tag (cons tag (fix-extensions rest optional?)))))))+ (define fix-management (match-lambda ('() '())-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 05/14] guix: maven: Support fixing modules.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-5-julien@lepiller.eu
* guix/build/maven/pom.scm (fix-pom-dependencies): Support fixingmodules that do not exist.* guix/build/maven-build-system.scm (fix-pom): Fix modules.--- guix/build/maven-build-system.scm | 1 + guix/build/maven/pom.scm | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-)
Toggle diff (53 lines)diff --git a/guix/build/maven-build-system.scm b/guix/build/maven-build-system.scmindex 374fa2fdb8..b3d97c81ea 100644--- a/guix/build/maven-build-system.scm+++ b/guix/build/maven-build-system.scm@@ -65,6 +65,7 @@ (format #t "fixing ~a~%" pom-file) (fix-pom-dependencies pom-file (map cdr inputs) #:with-plugins? #t #:with-build-dependencies? #t+ #:with-modules? #t #:local-packages local-packages #:excludes excludes)) diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scmindex 3a4ad7a216..ffb4515179 100644--- a/guix/build/maven/pom.scm+++ b/guix/build/maven/pom.scm@@ -291,7 +291,8 @@ this repository contains." (define* (fix-pom-dependencies pom-file inputs #:key with-plugins? with-build-dependencies?- (excludes '()) (local-packages '()))+ with-modules? (excludes '())+ (local-packages '())) "Open @var{pom-file}, and override its content, rewritting its dependencies to set their version to the latest version available in the @var{inputs}. @@ -339,8 +340,24 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." `((http://maven.apache.org/POM/4.0.0:build ,(fix-build build)) ,@(fix-pom rest)) (cons tag (fix-pom rest))))+ (('http://maven.apache.org/POM/4.0.0:modules modules ...)+ (if with-modules?+ `((http://maven.apache.org/POM/4.0.0:modules ,(fix-modules modules))+ ,@(fix-pom rest))+ (cons tag (fix-pom rest)))) (tag (cons tag (fix-pom rest))))))) + (define fix-modules+ (match-lambda+ ('() '())+ ((tag rest ...)+ (match tag+ (('http://maven.apache.org/POM/4.0.0:module module)+ (if (file-exists? (string-append (dirname pom-file) "/" module "/pom.xml"))+ `((http://maven.apache.org/POM/4.0.0:module ,module) ,@(fix-modules rest))+ (fix-modules rest)))+ (tag (cons tag (fix-modules rest)))))))+ (define fix-dep-management (match-lambda ('() '())-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 06/14] guix: maven: Look in local packages when searching for package version.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-6-julien@lepiller.eu
* guix/build/maven/pom.scm (fix-pom-dependencies): Also look at localpackages when looking for a package version.--- guix/build/maven/pom.scm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
Toggle diff (41 lines)diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scmindex ffb4515179..9c0669c7cd 100644--- a/guix/build/maven/pom.scm+++ b/guix/build/maven/pom.scm@@ -481,7 +481,7 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." (cons `(http://maven.apache.org/POM/4.0.0:version ,version) dep))) dep))) - (define* (find-version inputs group artifact #:optional optional?)+ (define (find-packaged-version inputs group artifact) (let* ((directory (string-append "lib/m2/" (group->dir group) "/" artifact)) (java-inputs (filter@@ -493,13 +493,19 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." (versions (append-map ls java-inputs)) (versions (sort versions version>?))) (if (null? versions)- (if optional? #f- (begin- (format (current-error-port) "maven: ~a:~a is missing from inputs~%"- group artifact)- (throw 'no-such-input group artifact)))- (car versions))))+ (car versions))))++ (define* (find-version inputs group artifact #:optional optional?)+ (let ((packaged-version (find-packaged-version inputs group artifact))+ (local-version (assoc-ref (assoc-ref local-packages group) artifact)))+ (or local-version packaged-version+ (if optional?+ #f+ (begin+ (format (current-error-port) "maven: ~a:~a is missing from inputs~%"+ group artifact)+ (throw 'no-such-input group artifact)))))) (let ((tmpfile (string-append pom-file ".tmp"))) (with-output-to-file pom-file-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 07/14] guix: maven: Use a temporary file to fix pom files.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-7-julien@lepiller.eu
* guix/build/maven/pom.scm (fix-pom-dependencies): Actually use thetemporary file that was created.--- guix/build/maven/pom.scm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
Toggle diff (16 lines)diff --git a/guix/build/maven/pom.scm b/guix/build/maven/pom.scmindex 9c0669c7cd..9e35e47a7f 100644--- a/guix/build/maven/pom.scm+++ b/guix/build/maven/pom.scm@@ -508,6 +508,7 @@ Returns nothing, but overrides the @var{pom-file} as a side-effect." (throw 'no-such-input group artifact)))))) (let ((tmpfile (string-append pom-file ".tmp")))- (with-output-to-file pom-file+ (with-output-to-file tmpfile (lambda _- (sxml->xml (fix-maven-xml (fix-pom pom)))))))+ (sxml->xml (fix-maven-xml (fix-pom pom)))))+ (rename-file tmpfile pom-file)))-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 08/14] guix: java-utils: Look for actual jar files.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-8-julien@lepiller.eu
* guix/build/java-utils.scm (install-from-pom): Fix `find-files` to lookonly for jar files.--- guix/build/java-utils.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Toggle diff (15 lines)diff --git a/guix/build/java-utils.scm b/guix/build/java-utils.scmindex 5a54a14c1b..87c3ac43c9 100644--- a/guix/build/java-utils.scm+++ b/guix/build/java-utils.scm@@ -125,7 +125,7 @@ the phase fails." version ".jar")))) ;; Otherwise, we try to find any jar file. (jars (if (null? jars)- (find-files "." ".*.jar")+ (find-files "." "\\.jar$") jars)) (jar-name (string-append repository artifact "-" version ".jar")) (pom-name (string-append repository artifact "-" version ".pom")))-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 10/14] gnu: java-commons-math3: Install to maven repository.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-10-julien@lepiller.eu
* gnu/packages/java.scm (java-commons-math3)[phases]: Useinstall-from-pom.--- gnu/packages/java.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Toggle diff (15 lines)diff --git a/gnu/packages/java.scm b/gnu/packages/java.scmindex 14d02af512..dd9827a351 100644--- a/gnu/packages/java.scm+++ b/gnu/packages/java.scm@@ -5789,7 +5789,7 @@ overly clever.") #t)) ;; There is no install target. (replace 'install- (install-jars "target")))))+ (install-from-pom "pom.xml"))))) (native-inputs `(("java-junit" ,java-junit) ("java-hamcrest-core" ,java-hamcrest-core)))-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 09/14] gnu: Add java-jopt-simple-4.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-9-julien@lepiller.eu
* gnu/packges/java.scm (java-jopt-simple-4): New variable.(java-jopt-simple): Install to maven repository structure.--- gnu/packages/java.scm | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-)
Toggle diff (59 lines)diff --git a/gnu/packages/java.scm b/gnu/packages/java.scmindex d7118b4ce6..14d02af512 100644--- a/gnu/packages/java.scm+++ b/gnu/packages/java.scm@@ -3,7 +3,7 @@ ;;; Copyright © 2016 Leo Famulari <leo@famulari.name> ;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org> ;;; Copyright © 2017, 2019, 2021 Carlo Zancanaro <carlo@zancanaro.id.au>-;;; Copyright © 2017-2020 Julien Lepiller <julien@lepiller.eu>+;;; Copyright © 2017-2021 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be> ;;; Copyright © 2016, 2017, 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2017, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>@@ -5715,7 +5715,13 @@ The jMock library (build-system ant-build-system) (arguments `(#:tests? #f ; there are no tests- #:jar-name "jopt-simple.jar"))+ #:jar-name "jopt-simple.jar"+ #:phases+ (modify-phases %standard-phases+ (add-before 'install 'create-pom+ (generate-pom.xml "pom.xml" "net.sf.jopt-simple" "jopt-simple" ,version))+ (replace 'install+ (install-from-pom "pom.xml"))))) (home-page "https://pholser.github.io/jopt-simple/") (synopsis "Java library for parsing command line options") (description "JOpt Simple is a Java library for parsing command line@@ -5727,6 +5733,28 @@ retrieval of options and their arguments simple and expressive, without being overly clever.") (license license:expat))) +;; Required by jmh+(define-public java-jopt-simple-4+ (package+ (inherit java-jopt-simple)+ (version "4.6")+ (source (origin+ (method url-fetch)+ (uri (string-append "https://repo1.maven.org/maven2/"+ "net/sf/jopt-simple/jopt-simple/"+ version "/jopt-simple-"+ version "-sources.jar"))+ (sha256+ (base32+ "0ny82zczxkn201ld0b7rps0ifzjhfs8m1ncdmy1f50145ciszkpd"))))+ (arguments+ (substitute-keyword-arguments (package-arguments java-jopt-simple)+ ((#:phases phases)+ `(modify-phases ,phases+ (replace 'create-pom+ (generate-pom.xml "pom.xml" "net.sf.jopt-simple" "jopt-simple"+ ,version))))))))+ (define-public java-commons-math3 (package (name "java-commons-math3")-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 11/14] gnu: maven-core: Hardcode versions we have in Guix.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-11-julien@lepiller.eu
* gnu/packages/maven.scm (maven-core)[phases]: Replace default hardcodedversions by versions of packages we have in Guix.--- gnu/packages/maven.scm | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-)
Toggle diff (54 lines)diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scmindex 8f63ee9be2..9d65e9b56d 100644--- a/gnu/packages/maven.scm+++ b/gnu/packages/maven.scm@@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU-;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>+;;; Copyright © 2018-2021 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>@@ -1541,7 +1541,9 @@ process.")))) (add-before 'build 'modify-metainf (lambda _ (substitute* "build.xml"- (("message=\"\"") "message=\"Implementation-Version: 3.5.4\n\""))+ (("message=\"\"")+ (string-append "message=\"Implementation-Version: "+ (package-version maven) "\n\""))) #t)) (add-before 'build 'add-maven-files (lambda _@@ -1590,7 +1592,28 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap)))) default-bindings-xml artifact-handlers-xml))))))) #t))- (add-after 'generate-metadata 'rebuild+ (add-after 'generate-metadata 'fix-plugin-versions+ (lambda _+ ;; This file controls the default plugins used by Maven. Ensure+ ;; we use the versions we have packaged by default+ (substitute* '("build/classes/META-INF/plexus/default-bindings.xml"+ "build/classes/META-INF/plexus/components.xml")+ (("maven-install-plugin:[0-9.]+")+ (string-append "maven-install-plugin:"+ ,(package-version maven-install-plugin)))+ (("maven-resources-plugin:[0-9.]+")+ (string-append "maven-resources-plugin:"+ ,(package-version maven-resources-plugin)))+ (("maven-compiler-plugin:[0-9.]+")+ (string-append "maven-compiler-plugin:"+ ,(package-version maven-compiler-plugin)))+ (("maven-surefire-plugin:[0-9.]+")+ (string-append "maven-surefire-plugin:"+ ,(package-version maven-surefire-plugin)))+ (("maven-jar-plugin:[0-9.]+")+ (string-append "maven-jar-plugin:"+ ,(package-version maven-jar-plugin))))))+ (add-after 'fix-plugin-versions 'rebuild (lambda _ (invoke "ant" "jar") #t))))))-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 12/14] gnu: maven-enforcer-parent-pom: Fix pom.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-12-julien@lepiller.eu
* gnu/packages/maven.scm (maven-enforcer-parent-pom): Fix dependencyversions in pom file.--- gnu/packages/maven.scm | 9 +++++++++ 1 file changed, 9 insertions(+)
Toggle diff (22 lines)diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scmindex 9d65e9b56d..f7cb168f47 100644--- a/gnu/packages/maven.scm+++ b/gnu/packages/maven.scm@@ -2713,6 +2713,15 @@ Maven project dependencies.") (modify-phases %standard-phases (delete 'configure) (delete 'build)+ (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>"))))) (replace 'install (install-pom-file "pom.xml"))))) (propagated-inputs-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 13/14] gnu: java-jmh: Update to 1.32.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-13-julien@lepiller.eu
* gnu/packages/java.scm (java-jmh): Update to 1.32.[source]: Switch to the git repository.--- gnu/packages/java.scm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
Toggle diff (30 lines)diff --git a/gnu/packages/java.scm b/gnu/packages/java.scmindex dd9827a351..c7ae002736 100644--- a/gnu/packages/java.scm+++ b/gnu/packages/java.scm@@ -5803,16 +5803,16 @@ available in the Java programming language or Commons Lang.") (define-public java-jmh (package (name "java-jmh")- (version "1.17.5")+ (version "1.32") (source (origin- (method hg-fetch)- (uri (hg-reference- (url "http://hg.openjdk.java.net/code-tools/jmh/")- (changeset version)))- (file-name (string-append name "-" version "-checkout"))+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/openjdk/jmh")+ (commit version)))+ (file-name (git-file-name name version)) (sha256 (base32- "1fxyxhg9famwcg1prc4cgwb5wzyxqavn3cjm5vz8605xz7x5k084"))))+ "0i7fa7l3gdqkkgz5ddayp6m46dgbj9rqlz35xffrcbyiz3gpljy0")))) (build-system ant-build-system) (arguments `(#:jar-name "jmh-core.jar"-- 2.31.1
J
J
Julien Lepiller wrote on 1 Jun 00:44 +0200
[PATCH 14/14] gnu: java-jmh: Switch to maven-build-system.
(address . 48766@debbugs.gnu.org)
20210531224427.13300-14-julien@lepiller.eu
* gnu/packages/java.scm (java-jmh): Switch to maven-build-system.--- gnu/packages/java.scm | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-)
Toggle diff (58 lines)diff --git a/gnu/packages/java.scm b/gnu/packages/java.scmindex c7ae002736..f597c64811 100644--- a/gnu/packages/java.scm+++ b/gnu/packages/java.scm@@ -43,6 +43,7 @@ #:use-module (guix utils) #:use-module (guix build-system ant) #:use-module (guix build-system gnu)+ #:use-module (guix build-system maven) #:use-module (guix build-system trivial) #:use-module (gnu packages) #:use-module (gnu packages attr)@@ -5813,26 +5814,27 @@ available in the Java programming language or Commons Lang.") (sha256 (base32 "0i7fa7l3gdqkkgz5ddayp6m46dgbj9rqlz35xffrcbyiz3gpljy0"))))- (build-system ant-build-system)+ (build-system maven-build-system) (arguments- `(#:jar-name "jmh-core.jar"- #:source-dir "jmh-core/src/main"- #:test-dir "jmh-core/src/test"+ `(#:exclude+ (("org.apache.maven.plugins" .+ ("maven-source-plugin" "maven-archetype-plugin" "maven-shade-plugin"+ "maven-site-plugin" "maven-javadoc-plugin" "maven-eclipse-plugin"))+ ("com.mycila.maven-license-plugin" . ("maven-license-plugin"))+ ("org.apache.maven.wagon" . ("wagon-ssh")))+ #:maven-plugins+ (("maven-enforcer-plugin" ,maven-enforcer-plugin)+ ,@(default-maven-plugins)) #:phases (modify-phases %standard-phases- ;; This seems to be a bug in the JDK. It may not be necessary in- ;; future versions of the JDK.- (add-after 'unpack 'fix-bug+ (add-after 'unpack 'remove-unnecessary (lambda _- (with-directory-excursion- "jmh-core/src/main/java/org/openjdk/jmh/runner/options"- (substitute* '("IntegerValueConverter.java"- "ThreadsValueConverter.java")- (("public Class<Integer> valueType")- "public Class<? extends Integer> valueType")))- #t)))))- (inputs- `(("java-jopt-simple" ,java-jopt-simple)+ ;; requires org.apache.maven.archetype:archetype-packaging.+ ;; Its subprojects also require groovy, kotlin and scala,+ ;; respectively.+ (delete-file-recursively "jmh-archetypes"))))))+ (propagated-inputs+ `(("java-jopt-simple" ,java-jopt-simple-4) ("java-commons-math3" ,java-commons-math3))) (native-inputs `(("java-junit" ,java-junit)-- 2.31.1
?