gnu: Add maven-artifact.

* gnu/packages/maven.scm (maven-artifact): New variable.
* gnu/packages/patches/maven-generate-component-xml.patch: New file.
* gnu/packages/patches/maven-generate-javax-inject-named.patch: New
file.
* gnu/local.mk (dist_patch_DATA): Add them.
This commit is contained in:
Julien Lepiller 2018-05-27 22:20:38 +02:00
parent 816db9668c
commit 458687d586
No known key found for this signature in database
GPG Key ID: 43111F4520086A0C
4 changed files with 242 additions and 0 deletions

View File

@ -918,6 +918,8 @@ dist_patch_DATA = \
%D%/packages/patches/mars-install.patch \ %D%/packages/patches/mars-install.patch \
%D%/packages/patches/mars-sfml-2.3.patch \ %D%/packages/patches/mars-sfml-2.3.patch \
%D%/packages/patches/maxima-defsystem-mkdir.patch \ %D%/packages/patches/maxima-defsystem-mkdir.patch \
%D%/packages/patches/maven-generate-component-xml.patch \
%D%/packages/patches/maven-generate-javax-inject-named.patch \
%D%/packages/patches/mcron-install.patch \ %D%/packages/patches/mcron-install.patch \
%D%/packages/patches/mcrypt-CVE-2012-4409.patch \ %D%/packages/patches/mcrypt-CVE-2012-4409.patch \
%D%/packages/patches/mcrypt-CVE-2012-4426.patch \ %D%/packages/patches/mcrypt-CVE-2012-4426.patch \

View File

@ -128,3 +128,41 @@ ease usage of the repository system.")))
(synopsis "Maven repository connector implementation") (synopsis "Maven repository connector implementation")
(description "This package contains a repository connector implementation (description "This package contains a repository connector implementation
for repositories using URI-based layouts."))) for repositories using URI-based layouts.")))
(define-public maven-artifact
(package
(name "maven-artifact")
(version "3.5.3")
(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"))
(modules '((guix build utils)))
(snippet
'(begin
(for-each delete-file (find-files "." "\\.jar$"))
#t))
(patches
(search-patches "maven-generate-component-xml.patch"
"maven-generate-javax-inject-named.patch"))))
(build-system ant-build-system)
(arguments
`(#:jar-name "maven-artifact.jar"
#:source-dir "maven-artifact/src/main/java"
#:test-dir "maven-artifact/src/test"
#:main-class "org.apache.maven.artifact.versioning.ComparableVersion"))
(inputs
`(("java-plexus-utils" ,java-plexus-utils)
("java-commons-lang3" ,java-commons-lang3)))
(native-inputs
`(("java-junit" ,java-junit)))
(home-page "https://maven.apache.org/")
(synopsis "Build system")
(description "Apache Maven is a software project management and comprehension
tool. This package contains the Maven Artifact classes, providing the
@code{Artifact} interface, with its @code{DefaultArtifact} implementation. The
jar file is executable and provides a little tool to display how Maven parses
and compares versions:")
(license license:asl2.0)))

View File

@ -0,0 +1,171 @@
From da9e282d834f0e2128501a8154128dc95b4c599d Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Sat, 9 Sep 2017 20:34:38 +0200
Subject: [PATCH] Add a script to generate component.xml files.
plexus-component-metadata is normally used for this task, but it
depends on maven-core, which depends on maven-model-builder, which needs
plexus-component-metadata. This script is meant to break this dependency
cycle.
---
components.sh | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 132 insertions(+)
create mode 100755 components.sh
diff --git a/components.sh b/components.sh
new file mode 100755
index 0000000..c6748bd
--- /dev/null
+++ b/components.sh
@@ -0,0 +1,148 @@
+## This script generates a rough plexus/components.xml file. It is meant to
+## replace plexus-component-metadata as it eventually has a recursive dependency
+## on itself.
+##
+## This script must be run in the source directory (usually src/main/java).
+
+# Finds the complete name from a class name.
+function find_role() {
+ role=$1
+ # Find role
+ case $role in
+ "SettingsWriter" | "SettingsReader")
+ role=org.apache.maven.settings.io.$role
+ ;;
+ "SecDispatcher")
+ role=org.sonatype.plexus.components.sec.dispatcher.$role
+ ;;
+ "SettingsDecrypter")
+ role=org.apache.maven.settings.crypto.$role
+ ;;
+ "SettingsBuilder")
+ role=org.apache.maven.settings.building.$role
+ ;;
+ "SettingsValidator")
+ role=org.apache.maven.settings.validation.$role
+ ;;
+ "LoggerFactory")
+ role=org.eclipse.aether.spi.log.$role
+ ;;
+ "RemoteRepositoryManager" | "VersionResolver" | "VersionRangeResolver" \
+ | "ArtifactResolver" | "RepositoryEventDispatcher" | "MetadataResolver" \
+ | "SyncContextFactory" | "MetadataGeneratorFactory" | "MetadatResolver" \
+ | "ArtifactDescriptorReader")
+ role=org.eclipse.aether.impl.$role
+ ;;
+ "ModelBuilder" | "ModelProcessor")
+ role=org.apache.maven.model.building.$role
+ ;;
+ "ModelValidator")
+ role=org.apache.maven.model.validation.$role
+ ;;
+ "ProfileInjector" | "ProfileSelector")
+ role=org.apache.maven.model.profile.$role
+ ;;
+ "ProfileActivator")
+ role=org.apache.maven.model.profile.activation.$role
+ ;;
+ "SuperPomProvider")
+ role=org.apache.maven.model.superpom.$role
+ ;;
+ "ReportConfigurationExpander" | "PluginConfigurationExpander" \
+ | "ReportingConverter" | "LifecycleBindingsInjector")
+ role=org.apache.maven.model.plugin.$role
+ ;;
+ "ModelLocator")
+ role=org.apache.maven.model.locator.$role
+ ;;
+ "ModelPathTranslator" | "PathTranslator" | "UrlNormalizer" | "ModelUrlNormalizer")
+ role=org.apache.maven.model.path.$role
+ ;;
+ "DependencyManagementInjector" | "PluginManagementInjector")
+ role=org.apache.maven.model.management.$role
+ ;;
+ "ModelWriter" | "ModelReader")
+ role=org.apache.maven.model.io.$role
+ ;;
+ "DependencyManagementImporter")
+ role=org.apache.maven.model.composition.$role
+ ;;
+ "ModelNormalizer")
+ role=org.apache.maven.model.normalization.$role
+ ;;
+ "ModelInterpolator")
+ role=org.apache.maven.model.interpolation.$role
+ ;;
+ "InheritanceAssembler")
+ role=org.apache.maven.model.inheritance.$role
+ ;;
+ *)
+ role=$role
+ ;;
+ esac
+ echo $role
+}
+
+function generate_xml() {
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+echo "<component-set>"
+echo "<components>"
+
+for file in `find -name '*.java'`; do
+ annot=`grep "@Component" $file`
+ if [ "$?" == "0" ]; then
+ # We have a component!
+ role=$(echo $annot | sed 's|.*role = \(.*\).class.*|\1|')
+ role_hint=$(echo $annot | sed 's|.*hint = "\(.*\)" .*|\1|')
+ if [ "$role_hint" = "$annot" ]; then
+ role_hint=default
+ fi
+ implem=$(echo $file | sed -e 's|^\./||' -e 's|\.java||' -e 's|/|.|g')
+ role=$(find_role $role)
+
+ echo "<component>"
+ echo " <role>$role</role>"
+ echo " <role-hint>$role_hint</role-hint>"
+ echo " <implementation>$implem</implementation>"
+ echo " <description />"
+ echo " <isolated-realm>false</isolated-realm>"
+ echo " <requirements>"
+ reqn=1
+ cont=true
+ while [ "$cont" = "true" ]; do
+ requirement=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
+ ((reqn++))
+ property=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
+ if (echo $requirement | grep "@Requirement" >/dev/null); then
+ ((reqn++))
+ ((reqn++))
+ optional=$(echo $requirement | sed 's|.*optional = \(.*\) .*|\1|')
+ req_role=$(echo $requirement | sed 's|.*role = \(.*\).class .*|\1|')
+ if (echo $req_role | grep "@Requirement" >/dev/null); then
+ req_role=$(echo $property | sed 's|.*private \(.*\) .*|\1|')
+ fi
+ req_role=$(find_role $req_role)
+ req_name=$(echo $property | sed 's|[^ ]* [^ ]* \([^ ;]*\).*|\1|')
+ echo " <requirement>"
+ echo " <role>$req_role</role>"
+ echo " <field-name>$req_name</field-name>"
+ if (echo $optional | grep "@Requirement" >/dev/null); then
+ :
+ else
+ echo " <optional>$optional</optional>"
+ fi
+ echo " </requirement>"
+ else
+ cont=false
+ fi
+ done
+ echo " </requirements>"
+ echo "</component>"
+ fi
+done
+
+echo "</components>"
+echo "</component-set>"
+}
+
+(cd $1; generate_xml) > $2
--
2.14.1

View File

@ -0,0 +1,31 @@
From 1d20c0e403f1a38d4aca830e0eb4db03ba43efd3 Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
Date: Tue, 19 Sep 2017 22:21:29 +0200
Subject: [PATCH] Add sisu-maven-plugin replacement
---
sisu.sh | 12 ++++++++++++
1 file changed, 12 insertions(+)
create mode 100755 sisu.sh
diff --git a/sisu.sh b/sisu.sh
new file mode 100755
index 0000000..979f373
--- /dev/null
+++ b/sisu.sh
@@ -0,0 +1,12 @@
+## This script generates a rough javax.inject.Named file. It is meant to
+## replace sisu-maven-plugin as it eventually has a recursive dependency
+## on maven.
+##
+## This script must be run in the source directory (usually src/main/java).
+
+for file in `(cd $1; find -name '*.java')`; do
+ annot=`grep "^@Named" $1/$file`
+ if [ "$annot" != "" ]; then
+ echo $file | sed -e 's|^\./||' -e 's|\.java||' -e 's|/|.|g'
+ fi
+done > $2
--
2.14.1