* 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.
		
			
				
	
	
		
			171 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
						|
 |