3
5
Fork 0
mirror of git://git.savannah.gnu.org/guix.git synced 2023-12-14 03:33:07 +01:00
guix/gnu/packages/patches/maven-generate-component-xml.patch
Julien Lepiller 458687d586
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.
2018-06-09 23:24:52 +02:00

171 lines
5.7 KiB
Diff

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