X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/f216a9f99a57905d7beed9595cfb2124a6cf27e4..70ebab5aa773e18f650d771ebf7b492a098561cd:/gnu/packages/maven.scm diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scm index e282a9a8c2..c18850bb26 100644 --- a/gnu/packages/maven.scm +++ b/gnu/packages/maven.scm @@ -1,5 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2018 Julien Lepiller +;;; Copyright © 2019 Tobias Geerinckx-Rice +;;; Copyright © 2019 Björn Höfling ;;; ;;; This file is part of GNU Guix. ;;; @@ -20,9 +22,11 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix git-download) #:use-module (guix utils) #:use-module (guix build-system ant) #:use-module (gnu packages) + #:use-module (gnu packages base) #:use-module (gnu packages compression) #:use-module (gnu packages java) #:use-module (gnu packages web) @@ -76,22 +80,28 @@ provides the Maven plugin generating the component metadata."))) (define-public maven-resolver-api (package (name "maven-resolver-api") - (version "1.1.1") + (version "1.3.1") (source (origin - (method url-fetch) - (uri (string-append "https://github.com/apache/maven-resolver/" - "archive/maven-resolver-" version ".tar.gz")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/apache/maven-resolver.git") + (commit (string-append "maven-resolver-" version)))) + (file-name (git-file-name name version)) (sha256 (base32 - "0rpvdg3qr1j88gw0ankf0wnwfyq6238mdlm7s39vf5jrcvhdgwcl")))) + "1x1gll8nkfl6zgnab78fxxvvhg42b2grxgdh1wp2h4qxsjkxg93d")))) (build-system ant-build-system) (arguments `(#:jar-name "maven-resolver-api.jar" #:source-dir "maven-resolver-api/src/main/java" #:test-dir "maven-resolver-api/src/test")) (native-inputs - `(("java-junit" ,java-junit) - ("java-hamcrest-core" ,java-hamcrest-core))) + `(("java-asm" ,java-asm) + ("java-cglib" ,java-cglib) + ("java-hamcrest-core" ,java-hamcrest-core) + ("java-junit" ,java-junit) + ("java-mockito-1" ,java-mockito-1) + ("java-objenesis" ,java-objenesis))) (home-page "https://github.com/apache/maven-resolver") (synopsis "Maven repository system API") (description "This package contains the API for the maven repository system.") @@ -163,12 +173,14 @@ ease usage of the repository system."))) (mkdir-p "build/classes/META-INF/sisu") (with-output-to-file "build/classes/META-INF/sisu/javax.inject.Named" (lambda _ - (display "org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory\n")))))))) + (display "org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory\n"))) + #t))))) (inputs `(("maven-resolver-api" ,maven-resolver-api) ("maven-resolver-spi" ,maven-resolver-spi) ("maven-resolver-util" ,maven-resolver-util) - ("java-javax-inject" ,java-javax-inject))) + ("java-javax-inject" ,java-javax-inject) + ("java-slf4j-api" ,java-slf4j-api))) (native-inputs `(("java-junit" ,java-junit) ("java-hamcrest-core" ,java-hamcrest-core) @@ -197,28 +209,28 @@ for repositories using URI-based layouts."))) (string-append ;; Build this list by looking for files containing "@Named" "org.eclipse.aether.internal.impl.DefaultArtifactResolver\n" - "org.eclipse.aether.internal.impl.DefaultTransporterProvider\n" - "org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer\n" - "org.eclipse.aether.internal.impl.slf4j.Slf4jLoggerFactory\n" - "org.eclipse.aether.internal.impl.DefaultRepositorySystem\n" - "org.eclipse.aether.internal.impl.LoggerFactoryProvider\n" + "org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector\n" + "org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider\n" + "org.eclipse.aether.internal.impl.DefaultDeployer\n" "org.eclipse.aether.internal.impl.DefaultFileProcessor\n" + "org.eclipse.aether.internal.impl.DefaultInstaller\n" "org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider\n" - "org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory\n" - "org.eclipse.aether.internal.impl.DefaultDeployer\n" "org.eclipse.aether.internal.impl.DefaultMetadataResolver\n" - "org.eclipse.aether.internal.impl.DefaultInstaller\n" - "org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory\n" - "org.eclipse.aether.internal.impl.DefaultSyncContextFactory\n" "org.eclipse.aether.internal.impl.DefaultOfflineController\n" - "org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory\n" - "org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider\n" "org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager\n" - "org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher\n" "org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider\n" + "org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher\n" + "org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider\n" + "org.eclipse.aether.internal.impl.DefaultRepositorySystem\n" + "org.eclipse.aether.internal.impl.DefaultSyncContextFactory\n" + "org.eclipse.aether.internal.impl.DefaultTransporterProvider\n" "org.eclipse.aether.internal.impl.DefaultUpdateCheckManager\n" - "org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider\n" - "org.eclipse.aether.internal.impl.DefaultDependencyCollector\n")))) + "org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer\n" + "org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory\n" + "org.eclipse.aether.internal.impl.LoggerFactoryProvider\n" + "org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory\n" + "org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory\n" + "org.eclipse.aether.internal.impl.slf4j.Slf4jLoggerFactory")))) #t))))) (inputs `(("maven-resolver-api" ,maven-resolver-api) @@ -237,6 +249,90 @@ for repositories using URI-based layouts."))) ("java-hamcrest-core" ,java-hamcrest-core) ("maven-resolver-test-util" ,maven-resolver-test-util))))) +(define-public maven-resolver-transport-wagon + (package + (inherit maven-resolver-api) + (name "maven-resolver-transport-wagon") + (arguments + `(#:jar-name "maven-resolver-transport-wagon.jar" + #:source-dir "maven-resolver-transport-wagon/src/main/java" + #:test-dir "maven-resolver-transport-wagon/src/test" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'build 'generate-sisu + (lambda _ + (mkdir-p "build/classes/META-INF/sisu") + (with-output-to-file "build/classes/META-INF/sisu/javax.inject.Named" + (lambda _ + (display "org.eclipse.aether.transport.wagon.WagonTransporterFactory\n"))) + #t)) + (add-before 'build 'generate-components.xml + (lambda _ + (mkdir-p "build/classes/META-INF/plexus") + (with-output-to-file "build/classes/META-INF/plexus/components.xml" + (lambda _ + (display + (string-append + " + + + + org.eclipse.aether.transport.wagon.WagonConfigurator + plexus + org.eclipse.aether.internal.transport.wagon.PlexusWagonConfigurator + + false + + + org.codehaus.plexus.PlexusContainer + + container + + + + + org.eclipse.aether.transport.wagon.WagonProvider + plexus + org.eclipse.aether.internal.transport.wagon.PlexusWagonProvider + + false + + + org.codehaus.plexus.PlexusContainer + + container + + + + +\n")))) + #t))))) + (inputs + `(("maven-resolver-api" ,maven-resolver-api) + ("maven-resolver-spi" ,maven-resolver-spi) + ("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-classworld" ,java-plexus-classworlds) + ("java-plexus-plexus-util" ,java-plexus-utils) + ("java-slf4j-api" ,java-slf4j-api) + ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject) + ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus))) + (native-inputs + `(("java-junit" ,java-junit) + ("java-hamcrest-core" ,java-hamcrest-core) + ("maven-resolver-test-util" ,maven-resolver-test-util) + ("java-guava" ,java-guava) + ("java-cglib" ,java-cglib) + ("java-asm" ,java-asm) + ("java-aopalliance" ,java-aopalliance) + ("java-guice" ,java-guice))) + (synopsis "Transport implementation for Maven") + (description "This package contains a transport implementation based on +Maven Wagon, for use in Maven."))) + (define-public maven-shared-utils (package (name "maven-shared-utils") @@ -304,12 +400,12 @@ replacement with improvements.") (define-public maven-wagon-provider-api (package (name "maven-wagon-provider-api") - (version "3.0.0") + (version "3.1.0") (source (origin (method url-fetch) (uri (string-append "https://archive.apache.org/dist/maven/wagon/" "wagon-" version "-source-release.zip")) - (sha256 (base32 "1qb0q4m7vmf290xp3fnfdi3pwl3hkskia5g3z2v82q1ch3y2knqv")))) + (sha256 (base32 "0r07j6xdzdnrvqnv8ida7dx1m05pznh5qgmcfcfpyvg9nxbj3l1n")))) (build-system ant-build-system) (arguments `(#:jar-name "maven-wagon-provider-api.jar" @@ -344,23 +440,260 @@ artifact and repository handling code.") ("java-eclipse-jetty-server-9.2" ,java-eclipse-jetty-server-9.2) ("java-eclipse-jetty-servlet-9.2" ,java-eclipse-jetty-servlet-9.2) ("java-slf4j-api" ,java-slf4j-api) - ("java-tomcat" ,java-tomcat) + ("java-javaee-servletapi" ,java-javaee-servletapi) ("maven-wagon-provider-api" ,maven-wagon-provider-api))) (synopsis "Test classes from maven-wagon") (description "Maven Wagon is a transport abstraction that is used in Maven's artifact and repository handling code. This package contains common test classes used in multiple maven-wagon components."))) +(define-public maven-wagon-file + (package + (inherit maven-wagon-provider-api) + (name "maven-wagon-file") + (arguments + `(#:jar-name "maven-wagon-file.jar" + #:source-dir "wagon-providers/wagon-file/src/main/java" + #:test-dir "wagon-providers/wagon-file/src/test" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'check 'fix-paths + (lambda _ + ;; Tests assume they are run by maven, which copies test resources + ;; to target. Our ant-build-system does the same, but with the + ;; build directory. + (substitute* "wagon-providers/wagon-file/src/test/java/org/apache/maven/wagon/providers/file/FileWagonTest.java" + (("target") "build")) + #t)) + (add-after 'build 'generate-metadata + (lambda _ + (invoke "java" "-cp" (string-append (getenv "CLASSPATH") ":build/classes") + "org.codehaus.plexus.metadata.PlexusMetadataGeneratorCli" + "--source" "wagon-providers/wagon-file/src/main/java" + "--output" "build/classes/META-INF/plexus/components.xml" + "--classes" "build/classes" + "--descriptors" "build/classes/META-INF") + #t)) + (add-after 'generate-metadata 'rebuild + (lambda _ + (invoke "ant" "jar") + #t))))) + (inputs + `(("java-plexus-utils" ,java-plexus-utils) + ("maven-wagon-provider-api" ,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-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus) + ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject) + ("java-plexus-classworlds" ,java-plexus-classworlds) + ("java-guava" ,java-guava) + ("java-guice" ,java-guice) + ("java-javax-inject" ,java-javax-inject) + ("java-cglib" ,java-cglib) + ("java-slf4j-api" ,java-slf4j-api) + ("java-plexus-utils" ,java-plexus-utils) + ("java-plexus-cli" ,java-plexus-cli) + ("maven-plugin-api" ,maven-plugin-api) + ("maven-plugin-annotations" ,maven-plugin-annotations) + ("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) + ,@(package-native-inputs maven-wagon-provider-api))) + (synopsis "Wagon provider that gets and puts artifacts using the file system") + (description "Maven Wagon is a transport abstraction that is used in Maven's +artifact and repository handling code. It uses providers, that are tools to +manage artifacts and deployment. This package contains the file provider which +gets and puts artifacts using the file system."))) + +(define-public maven-wagon-tck-http + (package + (inherit maven-wagon-provider-api) + (name "maven-wagon-tck-http") + (arguments + `(#:jar-name "maven-wagon-tck-http.jar" + #:source-dir "wagon-tcks/wagon-tck-http/src/main/java" + #:tests? #f; no tests + #:jdk ,icedtea-8)) + (inputs + `(("java-plexus-util" ,java-plexus-utils) + ("maven-wagon-provider-api" ,maven-wagon-provider-api) + ("java-javaee-servletapi" ,java-javaee-servletapi) + ("java-slf4j-api" ,java-slf4j-api) + ("java-commons-codec" ,java-commons-codec) + ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus) + ("java-plexus-classworlds" ,java-plexus-classworlds) + ("java-eclipse-jetty-util-9.2" ,java-eclipse-jetty-util-9.2) + ("java-eclipse-jetty-webapp-9.2" ,java-eclipse-jetty-webapp-9.2) + ("java-eclipse-jetty-security-9.2" ,java-eclipse-jetty-security-9.2) + ("java-eclipse-jetty-server-9.2" ,java-eclipse-jetty-server-9.2) + ("java-eclipse-jetty-servlet-9.2" ,java-eclipse-jetty-servlet-9.2))) + (synopsis "Wagon HTTP Test Compatibility Kit") + (description "Maven Wagon is a transport abstraction that is used in Maven's +artifact and repository handling code. This package contains the HTTP +Test Compatibility Kit."))) + +(define-public maven-wagon-http-shared + (package + (inherit maven-wagon-provider-api) + (name "maven-wagon-http-shared") + (arguments + `(#:jar-name "maven-wagon-http-shared.jar" + #:source-dir "wagon-providers/wagon-http-shared/src/main/java" + #:test-dir "wagon-providers/wagon-http-shared/src/test" + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-after 'build 'generate-metadata + (lambda _ + (invoke "java" "-cp" (string-append (getenv "CLASSPATH") ":build/classes") + "org.codehaus.plexus.metadata.PlexusMetadataGeneratorCli" + "--source" "wagon-providers/wagon-http-shared/src/main/java" + "--output" "build/classes/META-INF/plexus/components.xml" + "--classes" "build/classes" + "--descriptors" "build/classes/META-INF") + #t)) + (add-after 'generate-metadata 'rebuild + (lambda _ + (invoke "ant" "jar") + #t))))) + (inputs + `(("java-plexus-utils" ,java-plexus-utils) + ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient) + ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("java-commons-io" ,java-commons-io) + ("java-jsoup" ,java-jsoup) + ("maven-wagon-provider-api" ,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-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus) + ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject) + ("java-plexus-classworlds" ,java-plexus-classworlds) + ("java-guava" ,java-guava) + ("java-guice" ,java-guice) + ("java-javax-inject" ,java-javax-inject) + ("java-cglib" ,java-cglib) + ("java-slf4j-api" ,java-slf4j-api) + ("java-plexus-utils" ,java-plexus-utils) + ("java-plexus-cli" ,java-plexus-cli) + ("maven-plugin-api" ,maven-plugin-api) + ("maven-plugin-annotations" ,maven-plugin-annotations) + ("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) + ,@(package-native-inputs maven-wagon-provider-api))) + (synopsis "Shared Library for wagon providers supporting HTTP.") + (description "Maven Wagon is a transport abstraction that is used in Maven's +artifact and repository handling code. It uses providers, that are tools to +manage artifacts and deployment. This package contains a shared library for +wagon providers supporting HTTP."))) + +(define-public maven-wagon-http + (package + (inherit maven-wagon-provider-api) + (name "maven-wagon-http") + (arguments + `(#:jar-name "maven-wagon-http.jar" + #:source-dir "wagon-providers/wagon-http/src/main/java" + #:test-dir "wagon-providers/wagon-http/src/test" + #:test-exclude (list + "**/Abstract*.java" + ;; FIXME: javax.net.ssl.SSLHandshakeException: + ;; sun.security.validator.ValidatorException: + ;; PKIX path building failed: + ;; sun.security.provider.certpath.SunCertPathBuilderException: + ;; unable to find valid certification path to requested target + "**/HttpsWagonPreemptiveTest.java" + "**/HttpsWagonTest.java" + ;; Injection errors + "**/TckTest.java") + #:jdk ,icedtea-8 + #:phases + (modify-phases %standard-phases + (add-before 'build 'copy-resources + (lambda _ + (install-file "wagon-providers/wagon-http/src/main/resources/META-INF/plexus/components.xml" + "build/classes/META-INF/plexus") + #t)) + (add-before 'check 'fix-resource-path + (lambda _ + (substitute* '("wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonPreemptiveTest.java" + "wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java") + (("src/test") "wagon-providers/wagon-http/src/test")) + #t))))) + (inputs + `(("java-plexus-utils" ,java-plexus-utils) + ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient) + ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("maven-wagon-http-shared" ,maven-wagon-http-shared) + ("maven-wagon-tck-http" ,maven-wagon-tck-http) + ("maven-wagon-provider-api" ,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-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus) + ("java-plexus-container-default" ,java-plexus-container-default) + ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject) + ("java-plexus-classworlds" ,java-plexus-classworlds) + ("java-guava" ,java-guava) + ("java-guice" ,java-guice) + ("java-inject" ,java-javax-inject) + ("java-cglib" ,java-cglib) + ("java-slf4j-api" ,java-slf4j-api) + ("java-plexus-utils" ,java-plexus-utils) + ("java-plexus-cli" ,java-plexus-cli) + ("maven-plugin-api" ,maven-plugin-api) + ("maven-plugin-annotations" ,maven-plugin-annotations) + ("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) + ("java-eclipse-jetty-io-9.2" ,java-eclipse-jetty-io-9.2) + ("java-eclipse-jetty-http-9.2" ,java-eclipse-jetty-http-9.2) + ("java-eclipse-jetty-server-9.2" ,java-eclipse-jetty-server-9.2) + ("java-eclipse-jetty-servlet-9.2" ,java-eclipse-jetty-servlet-9.2) + ("java-eclipse-jetty-security-9.2" ,java-eclipse-jetty-security-9.2) + ("java-hamcrest-core" ,java-hamcrest-core) + ("java-commons-logging-minimal" ,java-commons-logging-minimal) + ("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 +artifact and repository handling code. It uses providers, that are tools to +manage artifacts and deployment. This package contains a Wagon provider that +gets and puts artifacts through HTTP(S) using Apache HttpClient-4.x."))) + (define-public maven-artifact (package (name "maven-artifact") - (version "3.5.3") + (version "3.6.1") (source (origin (method url-fetch) (uri (string-append "https://archive.apache.org/dist/maven/" "maven-3/" version "/source/" "apache-maven-" version "-src.tar.gz")) - (sha256 (base32 "06by23fz207lkvsndq883irfcf4p77jzkgf7n2q7hzyw1hs4h5s7")) + (sha256 (base32 "0grw9zp166ci53rd7qkyy2qmwmik37xhiz1z84jpm0msyvzj2n82")) (modules '((guix build utils))) (snippet '(begin @@ -594,8 +927,8 @@ inheritance, interpolation, @dots{}"))) ("java-asm" ,java-asm) ("sisu-inject" ,java-eclipse-sisu-inject) ("javax-inject" ,java-javax-inject) - ("xmlunit" ,java-xmlunit) - ("xmlunit" ,java-xmlunit-legacy) + ("java-xmlunit" ,java-xmlunit) + ("java-xmlunit-matchers" ,java-xmlunit-matchers) ("xbean" ,java-geronimo-xbean-reflect) ("classworlds" ,java-plexus-classworlds))) (description "Apache Maven is a software project management and comprehension @@ -759,6 +1092,18 @@ generally generated from plugin sources using maven-plugin-plugin."))) (mkdir-p "build/classes/") (copy-recursively "src/main/resources" "build/classes") #t)) + (add-after 'copy-resources 'fill-properties + (lambda _ + ;; This file controls the output of some mvn subcommands, such as + ;; mvn -version. + (substitute* "build/classes/org/apache/maven/messages/build.properties" + (("\\$\\{buildNumber\\}") "guix_build") + (("\\$\\{timestamp\\}") "0") + (("\\$\\{project.version\\}") ,(package-version maven-artifact)) + (("\\$\\{distributionId\\}") "apache-maven") + (("\\$\\{distributionShortName\\}") "Maven") + (("\\$\\{distributionName\\}") "Apache Maven")) + #t)) (add-before 'build 'generate-sisu-named (lambda _ (mkdir-p "build/classes/META-INF/sisu") @@ -829,7 +1174,7 @@ process."))) (add-before 'build 'modify-metainf (lambda _ (substitute* "build.xml" - (("message=\"\"") "message=\"Implementation-Version: 3.5.3\n\"")) + (("message=\"\"") "message=\"Implementation-Version: 3.5.4\n\"")) #t)) (add-before 'build 'add-maven-files (lambda _ @@ -983,3 +1328,337 @@ artifactId=maven-core" ,(package-version maven-core-bootstrap)))) (description "Apache Maven is a software project management and comprehension tool. This package contains a Maven embeddable component, with CLI and logging support."))) + +(define-public maven-compat + (package + (inherit maven-artifact) + (name "maven-compat") + (arguments + `(#:jar-name "maven-compat.jar" + #:source-dir "src/main/java" + #:jdk ,icedtea-8 + #:test-dir "src/test" + #:phases + (modify-phases %standard-phases + ;; Tests assume we're in this directory + (add-before 'configure 'chdir + (lambda _ + (chdir "maven-compat") + #t)) + (add-before 'build 'recreate-removed-jar + (lambda _ + (with-output-to-file "src/test/repository-system/maven-core-2.1.0.jar" + (const #t)) + (with-directory-excursion "src/test/resources" + (with-output-to-file "artifact-install/artifact-1.0.jar" + (lambda _ + (format #t "dummy~%"))) + (for-each + (lambda (file) + (with-output-to-file file + (lambda _ + (format #t "foo~%")))) + '("local-repo/maven-test/jars/maven-test-a-1.0.jar" + "local-repo/maven-test/jars/maven-test-c-1.0.jar" + "local-repo/maven-test/jars/maven-test-d-1.0.jar" + "inheritance-repo/t04/maven-test/jars/t04-a-1.0.jar" + "inheritance-repo/t04/maven-test/jars/t04-b-1.0.jar" + "inheritance-repo/t04/maven-test/jars/t04-b-2.0.jar" + "inheritance-repo/t04/maven-test/jars/t04-c-1.0.jar" + "inheritance-repo/t04/maven-test/jars/t04-c-2.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-a-1.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-a-2.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-b-1.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-b-1.1.jar" + "inheritance-repo/t05/maven-test/jars/t05-b-2.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-c-1.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-d-1.0.jar" + "inheritance-repo/t05/maven-test/jars/t05-d-1.1.jar" + "inheritance-repo/t05/maven-test/jars/t05-d-1.2.jar" + "inheritance-repo/t06/maven-test/jars/t06-a-1.0.jar" + "inheritance-repo/t06/maven-test/jars/t06-b-1.0.jar" + "inheritance-repo/t06/maven-test/jars/t06-b-1.1.jar" + "inheritance-repo/t06/maven-test/jars/t06-c-1.0.jar" + "inheritance-repo/t06/maven-test/jars/t06-d-1.0.jar" + "inheritance-repo/t06/maven-test/jars/t06-d-1.1.jar" + "inheritance-repo/t06/maven-test/jars/t06-d-1.2.jar" + "inheritance-repo/t07/maven-test/jars/t07-a-1.0.jar" + "inheritance-repo/t07/maven-test/jars/t07-b-1.0.jar" + "inheritance-repo/t07/maven-test/jars/t07-b-1.1.jar" + "inheritance-repo/t07/maven-test/jars/t07-c-1.0.jar" + "inheritance-repo/t07/maven-test/jars/t07-d-1.0.jar" + "inheritance-repo/t07/maven-test/jars/t07-d-1.1.jar" + "inheritance-repo/t07/maven-test/jars/t07-d-1.2.jar" + "inheritance-repo/t08/maven-test/jars/t08-a-1.0.jar" + "inheritance-repo/t08/maven-test/jars/t08-b-1.0.jar" + "inheritance-repo/t08/maven-test/jars/t08-b-1.1.jar" + "inheritance-repo/t08/maven-test/jars/t08-c-1.0.jar" + "inheritance-repo/t08/maven-test/jars/t08-d-1.0.jar" + "inheritance-repo/t08/maven-test/jars/t08-d-1.1.jar" + "inheritance-repo/t08/maven-test/jars/t08-d-1.2.jar" + "inheritance-repo/t09/maven-test/jars/t09-a-1.0.jar" + "inheritance-repo/t09/maven-test/jars/t09-b-1.0.jar" + "inheritance-repo/t09/maven-test/jars/t09-c-1.0.jar" + "inheritance-repo/t09/maven-test/jars/t09-d-1.0.jar" + "inheritance-repo/t10/maven-test/jars/t10-a-1.0.jar" + "inheritance-repo/t10/maven-test/jars/t10-b-1.0.jar" + "inheritance-repo/t10/maven-test/jars/t10-c-1.0.jar")) + (with-directory-excursion "local-repo/snapshot-test/jars" + (for-each + (lambda (file) + (with-output-to-file file + (lambda _ + ;; No end-of-line + (format #t "local")))) + '("maven-snapshot-e-1.0-SNAPSHOT.jar" + "maven-snapshot-b-1.0-SNAPSHOT.jar" + "maven-snapshot-a-1.0-SNAPSHOT.jar")))) + (for-each + (lambda (letter) + (with-directory-excursion + (string-append "src/test/remote-repo/org/apache/maven/its/" + letter "/0.1") + (let ((dir (string-append "META-INF/maven/org.apache.maven.its/" + letter))) + (mkdir-p dir) + (copy-file (string-append letter "-0.1.pom") + (string-append dir "/pom.xml")) + (with-output-to-file (string-append dir "/pom.properties") + (lambda _ + (format #t "version=0.1~%") + (format #t "groupId=org.apache.maven.its") + (format #t (string-append "artifactId=" letter)))) + (with-output-to-file "META-INF/MANIFEST.MF" + (lambda _ + (format #t "Manifest-Version: 1.0~%")))) + (invoke "jar" "cmf" "META-INF/MANIFEST.MF" + (string-append letter "-0.1.jar") "META-INF"))) + '("a" "b")) + #t)) + (add-before 'build 'generate-models + (lambda* (#:key inputs #:allow-other-keys) + (define (modello-single-mode file version mode) + (invoke "java" "org.codehaus.modello.ModelloCli" + file mode "src/main/java" version + "false" "true")) + (let ((file "src/main/mdo/profiles.mdo")) + (modello-single-mode file "1.0.0" "java") + (modello-single-mode file "1.0.0" "xpp3-reader") + (modello-single-mode file "1.0.0" "xpp3-writer")) + (let ((file "src/main/mdo/paramdoc.mdo")) + (modello-single-mode file "1.0.0" "java") + (modello-single-mode file "1.0.0" "xpp3-reader") + (modello-single-mode file "1.0.0" "xpp3-writer")) + #t)) + (add-after 'build 'generate-metadata + (lambda _ + (invoke "java" "-cp" (string-append (getenv "CLASSPATH") ":build/classes") + "org.codehaus.plexus.metadata.PlexusMetadataGeneratorCli" + "--source" "src/main/java" + "--output" "build/classes/META-INF/plexus/components.xml" + "--classes" "build/classes" + "--descriptors" "build/classes/META-INF") + #t)) + (add-before 'check 'build-tests + (lambda _ + (invoke "ant" "compile-tests") + #t)) + (add-after 'build-tests 'generate-test-metadata + (lambda _ + (invoke "java" "-cp" (string-append (getenv "CLASSPATH") + ":build/classes" + ":build/test-classes") + "org.codehaus.plexus.metadata.PlexusMetadataGeneratorCli" + "--source" "src/test/java" + "--output" "build/test-classes/META-INF/plexus/components.xml" + "--classes" "build/test-classes" + "--descriptors" "build/test-classes/META-INF") + #t)) + (add-after 'generate-metadata 'rebuild + (lambda _ + (invoke "ant" "jar") + #t))))) + (inputs + `(("maven-artifact" ,maven-artifact) + ("maven-repository-metadata" ,maven-repository-metadata) + ("maven-builder-support" ,maven-builder-support) + ("maven-model" ,maven-model) + ("maven-model-builder" ,maven-model-builder) + ("maven-settings" ,maven-settings) + ("maven-settings-builder" ,maven-settings-builder) + ("maven-core" ,maven-core) + ("maven-wagon-provider-api" ,maven-wagon-provider-api) + ("maven-wagon-file" ,maven-wagon-file) + ("maven-resolver-api" ,maven-resolver-api) + ("maven-resolver-util" ,maven-resolver-util) + ("maven-resolver-spi" ,maven-resolver-spi) + ("java-plexus-interpolation" ,java-plexus-interpolation))) + (native-inputs + `(("java-modello-core" ,java-modello-core) + ("java-plexus-utils" ,java-plexus-utils) + ("java-plexus-component-annotations" ,java-plexus-component-annotations) + ("java-plexus-classworlds" ,java-plexus-classworlds) + ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect) + ("java-sisu-build-api" ,java-sisu-build-api) + ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus) + ("java-exclispe-sisu-inject" ,java-eclipse-sisu-inject) + ("java-javax-inject" ,java-javax-inject) + ("java-guice" ,java-guice) + ("java-guava" ,java-guava) + ("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) + ;; metadata + ("java-plexus-component-metadata" ,java-plexus-component-metadata) + ("java-commons-cli" ,java-commons-cli) + ("java-plexus-cli" ,java-plexus-cli) + ("java-jdom2" ,java-jdom2) + ("maven-plugin-api" ,maven-plugin-api) + ("java-qdox" ,java-qdox) + ;; tests + ("java-plexus-cipher" ,java-plexus-cipher) + ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher) + ("java-jsr250" ,java-jsr250) + ("java-cdi-api" ,java-cdi-api) + ("java-junit" ,java-junit) + ("maven-resolver-impl" ,maven-resolver-impl) + ("maven-resolver-connector-basic" ,maven-resolver-connector-basic) + ("maven-resolver-transport-wagon" ,maven-resolver-transport-wagon) + ("java-commons-lang3" ,java-commons-lang3) + ("java-aop" ,java-aopalliance) + ("maven-resolver-provider" ,maven-resolver-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 +layer for plugins that need to keep Maven2 compatibility."))) + +(define-public maven + (package + (inherit maven-artifact) + (name "maven") + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + ;; Recreate the configuration for the loader + (with-output-to-file "apache-maven/src/bin/m2.conf" + (lambda _ + (format #t "main is org.apache.maven.cli.MavenCli from plexus.core~%") + (format #t "~%") + (format #t "set maven.conf default ${maven.home}/conf~%") + (format #t "~%") + (format #t "[plexus.core]~%") + (format #t "load ${maven.conf}/logging~%") + (format #t "optionally ${maven.home}/lib/ext/*.jar~%") + ;; Reference every jar so plexus-classworlds can find them. + (for-each + (lambda (dependency) + (format #t "load ~a/share/java/*.jar~%" + (assoc-ref inputs dependency))) + '("maven-artifact" "maven-embedder" "maven-core" "maven-compat" + "maven-builder-support" "maven-model" "maven-model-builder" + "maven-settings" "maven-settings-builder" "maven-plugin-api" + "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-wagon-file" "maven-wagon-http" "java-commons-logging-minimal" + "java-httpcomponents-httpclient" "java-httpcomponents-httpcore" + "maven-wagon-http-shared" "maven-wagon-tck-http" + "java-eclipse-sisu-plexus" "java-guice" "java-aopalliance" + "java-cglib" "java-asm" "java-eclipse-sisu-inject" + "java-javax-inject" "java-plexus-component-annotations" + "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")))) + (substitute* "apache-maven/src/bin/mvn" + (("cygwin=false;") + (string-append + "CLASSPATH=" + (car (find-files + (assoc-ref inputs "java-plexus-classworlds") + ".*.jar")) + "\ncygwin=false;")) + (("-classpath.*") "-classpath ${CLASSPATH} \\\n")) + #t)) + (delete 'check) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((bin (string-append (assoc-ref outputs "out") "/bin/")) + (conf (string-append (assoc-ref outputs "out") "/conf/"))) + (mkdir-p (string-append (assoc-ref outputs "out") "/lib")) + (for-each (lambda (file) + (install-file (string-append "apache-maven/src/bin/" file) + bin) + (chmod (string-append bin file) #o755)) + '("mvn" "mvnDebug" "mvnyjp")) + (install-file "apache-maven/src/bin/m2.conf" bin) + (copy-recursively "apache-maven/src/conf" conf)) + #t))))) + (inputs + `(("java-plexus-classworlds" ,java-plexus-classworlds) + ("maven-artifact" ,maven-artifact) + ("maven-embedder" ,maven-embedder) + ("maven-core" ,maven-core) + ("maven-compat" ,maven-compat) + ("maven-builder-support" ,maven-builder-support) + ("maven-model" ,maven-model) + ("maven-model-builder" ,maven-model-builder) + ("maven-settings" ,maven-settings) + ("maven-settings-builder" ,maven-settings-builder) + ("maven-plugin-api" ,maven-plugin-api) + ("maven-repository-metadata" ,maven-repository-metadata) + ("maven-shared-utils" ,maven-shared-utils) + ("maven-resolver-api" ,maven-resolver-api) + ("maven-resolver-spi" ,maven-resolver-spi) + ("maven-resolver-util" ,maven-resolver-util) + ("maven-resolver-impl" ,maven-resolver-impl) + ("maven-resolver-connector-basic" ,maven-resolver-connector-basic) + ("maven-resolver-provider" ,maven-resolver-provider) + ("maven-resolver-transport-wagon" ,maven-resolver-transport-wagon) + ("maven-wagon-provider-api" ,maven-wagon-provider-api) + ("maven-wagon-file" ,maven-wagon-file) + ("maven-wagon-http" ,maven-wagon-http) + ("java-commons-logging-minimal" ,java-commons-logging-minimal) + ("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient) + ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore) + ("maven-wagon-http-shared" ,maven-wagon-http-shared) + ("maven-wagon-tck-http" ,maven-wagon-tck-http) + ("java-eclipse-sisu-plexus" ,java-eclipse-sisu-plexus) + ("java-guice" ,java-guice) + ("java-aopalliance" ,java-aopalliance) + ("java-cglib" ,java-cglib) + ("java-asm" ,java-asm) + ("java-eclipse-sisu-inject" ,java-eclipse-sisu-inject) + ("java-javax-inject" ,java-javax-inject) + ("java-plexus-component-annotations" ,java-plexus-component-annotations) + ("java-plexus-utils" ,java-plexus-utils) + ("java-plexus-interpolation" ,java-plexus-interpolation) + ("java-plexus-sec-dispatcher" ,java-plexus-sec-dispatcher) + ("java-plexus-cipher" ,java-plexus-cipher) + ("java-guava" ,java-guava) + ("java-jansi" ,java-jansi) + ("java-jsr250" ,java-jsr250) + ("java-cdi-api" ,java-cdi-api) + ("java-commons-cli" ,java-commons-cli) + ("java-commons-io" ,java-commons-io) + ("java-commons-lang3" ,java-commons-lang3) + ("java-slf4j-api" ,java-slf4j-api) + ;; TODO: replace with maven-slf4j-provider + ("java-slf4j-simple" ,java-slf4j-simple))) + (propagated-inputs + `(("coreutils" ,coreutils) + ("which" ,which))) + (description "Apache Maven is a software project management and comprehension +tool. Based on the concept of a project object model: builds, dependency +management, documentation creation, site publication, and distribution +publication are all controlled from the @file{pom.xml} declarative file. Maven +can be extended by plugins to utilise a number of other development tools for +reporting or the build process.")))