guix-more/maven-generate-component-xml.patch

maven-generate-component-xml.patch

1
From da9e282d834f0e2128501a8154128dc95b4c599d Mon Sep 17 00:00:00 2001
2
From: Julien Lepiller <julien@lepiller.eu>
3
Date: Sat, 9 Sep 2017 20:34:38 +0200
4
Subject: [PATCH] Add a script to generate component.xml files.
5
6
plexus-component-metadata is normally used for this task, but it
7
depends on maven-core, which depends on maven-model-builder, which needs
8
plexus-component-metadata. This script is meant to break this dependency
9
cycle.
10
---
11
 components.sh | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
 1 file changed, 132 insertions(+)
13
 create mode 100755 components.sh
14
15
diff --git a/components.sh b/components.sh
16
new file mode 100755
17
index 0000000..c6748bd
18
--- /dev/null
19
+++ b/components.sh
20
@@ -0,0 +1,132 @@
21
+## This script generates a rough plexus/components.xml file. It is meant to
22
+## replace plexus-component-metadata as it eventually has a recursive dependency
23
+## on itself.
24
+##
25
+## This script must be run in the source directory (usually src/main/java).
26
+
27
+# Finds the complete name from a class name.
28
+function find_role() {
29
+    role=$1
30
+    # Find role
31
+    case $role in
32
+      "LoggerFactory")
33
+        role=org.eclipse.aether.spi.log.$role
34
+        ;;
35
+      "RemoteRepositoryManager" | "VersionResolver" | "VersionRangeResolver" \
36
+      | "ArtifactResolver" | "RepositoryEventDispatcher" | "MetadataResolver" \
37
+      | "SyncContextFactory" | "MetadataGeneratorFactory" | "MetadatResolver")
38
+        role=org.eclipse.aether.impl.$role
39
+        ;;
40
+      "ModelBuilder" | "ModelProcessor")
41
+        role=org.apache.maven.model.building.$role
42
+        ;;
43
+      "ModelValidator")
44
+        role=org.apache.maven.model.validation.$role
45
+        ;;
46
+      "ProfileInjector" | "ProfileSelector")
47
+        role=org.apache.maven.model.profile.$role
48
+        ;;
49
+      "ProfileActivator")
50
+        role=org.apache.maven.model.profile.activation.$role
51
+        ;;
52
+      "SuperPomProvider")
53
+        role=org.apache.maven.model.superpom.$role
54
+        ;;
55
+      "ReportConfigurationExpander" | "PluginConfigurationExpander" \
56
+      | "ReportingConverter" | "LifecycleBindingsInjector")
57
+        role=org.apache.maven.model.plugin.$role
58
+        ;;
59
+      "ModelLocator")
60
+        role=org.apache.maven.model.locator.$role
61
+        ;;
62
+      "ModelPathTranslator" | "PathTranslator" | "UrlNormalizer" | "ModelUrlNormalizer")
63
+        role=org.apache.maven.model.path.$role
64
+        ;;
65
+      "DependencyManagementInjector" | "PluginManagementInjector")
66
+        role=org.apache.maven.model.management.$role
67
+        ;;
68
+      "ModelWriter" | "ModelReader")
69
+        role=org.apache.maven.model.io.$role
70
+        ;;
71
+      "DependencyManagementImporter")
72
+        role=org.apache.maven.model.composition.$role
73
+        ;;
74
+      "ModelNormalizer")
75
+        role=org.apache.maven.model.normalization.$role
76
+        ;;
77
+      "ModelInterpolator")
78
+        role=org.apache.maven.model.interpolation.$role
79
+        ;;
80
+      "InheritanceAssembler")
81
+        role=org.apache.maven.model.inheritance.$role
82
+        ;;
83
+      *)
84
+        role=$role
85
+        ;;
86
+    esac
87
+    echo $role
88
+}
89
+
90
+function generate_xml() {
91
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
92
+echo "<component-set>"
93
+echo "<components>"
94
+
95
+for file in `find -name '*.java'`; do
96
+  annot=`grep "@Component" $file`
97
+  if [ "$?" == "0" ]; then
98
+    # We have a component!
99
+    role=$(echo $annot | sed 's|.*role = \(.*\).class.*|\1|')
100
+    role_hint=$(echo $annot | sed 's|.*hint = "\(.*\)" .*|\1|')
101
+    if [ "$role_hint" = "$annot" ]; then
102
+      role_hint=default
103
+    fi
104
+    implem=$(echo $file | sed -e 's|^\./||' -e 's|\.java||' -e 's|/|.|g')
105
+    role=$(find_role $role)
106
+
107
+    echo "<component>"
108
+    echo "  <role>$role</role>"
109
+    echo "  <role-hint>$role_hint</role-hint>"
110
+    echo "  <implementation>$implem</implementation>"
111
+    echo "  <description />"
112
+    echo "  <isolated-realm>false</isolated-realm>"
113
+    echo "  <requirements>"
114
+    reqn=1
115
+    cont=true
116
+    while [ "$cont" = "true" ]; do
117
+      requirement=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
118
+      ((reqn++))
119
+      property=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
120
+      if (echo $requirement | grep "@Requirement" >/dev/null); then
121
+        ((reqn++))
122
+        ((reqn++))
123
+        optional=$(echo $requirement | sed 's|.*optional = \(.*\) .*|\1|')
124
+        req_role=$(echo $requirement | sed 's|.*role = \(.*\).class .*|\1|')
125
+        if (echo $req_role | grep "@Requirement" >/dev/null); then
126
+          req_role=$(echo $property | sed 's|.*private \(.*\) .*|\1|')
127
+        fi
128
+        req_role=$(find_role $req_role)
129
+        req_name=$(echo $property | sed 's|[^ ]* [^ ]* \([^ ;]*\).*|\1|')
130
+        echo "    <requirement>"
131
+        echo "      <role>$req_role</role>"
132
+        echo "      <field-name>$req_name</field-name>"
133
+        if (echo $optional | grep "@Requirement" >/dev/null); then
134
+          :
135
+        else
136
+          echo "      <optional>$optional</optional>"
137
+        fi
138
+        echo "    </requirement>"
139
+      else
140
+        cont=false
141
+      fi
142
+    done
143
+    echo "  </requirements>"
144
+    echo "</component>"
145
+  fi
146
+done
147
+
148
+echo "</components>"
149
+echo "</component-set>"
150
+}
151
+
152
+(cd $1; generate_xml) > $2
153
-- 
154
2.14.1
155
156