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

maven-generate-component-xml.patch

1
From 676c4e33be256e4af2e028088dd28ae7be511df3 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 | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12
 1 file changed, 124 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..a00b25b
18
--- /dev/null
19
+++ b/components.sh
20
@@ -0,0 +1,124 @@
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
+      "ModelBuilder" | "ModelProcessor")
33
+        role=org.apache.maven.model.building.$role
34
+        ;;
35
+      "ModelValidator")
36
+        role=org.apache.maven.model.validation.$role
37
+        ;;
38
+      "ProfileInjector" | "ProfileSelector")
39
+        role=org.apache.maven.model.profile.$role
40
+        ;;
41
+      "ProfileActivator")
42
+        role=org.apache.maven.model.profile.activation.$role
43
+        ;;
44
+      "SuperPomProvider")
45
+        role=org.apache.maven.model.superpom.$role
46
+        ;;
47
+      "ReportConfigurationExpander" | "PluginConfigurationExpander" \
48
+      | "ReportingConverter" | "LifecycleBindingsInjector")
49
+        role=org.apache.maven.model.plugin.$role
50
+        ;;
51
+      "ModelLocator")
52
+        role=org.apache.maven.model.locator.$role
53
+        ;;
54
+      "ModelPathTranslator" | "PathTranslator" | "UrlNormalizer" | "ModelUrlNormalizer")
55
+        role=org.apache.maven.model.path.$role
56
+        ;;
57
+      "DependencyManagementInjector" | "PluginManagementInjector")
58
+        role=org.apache.maven.model.management.$role
59
+        ;;
60
+      "ModelWriter" | "ModelReader")
61
+        role=org.apache.maven.model.io.$role
62
+        ;;
63
+      "DependencyManagementImporter")
64
+        role=org.apache.maven.model.composition.$role
65
+        ;;
66
+      "ModelNormalizer")
67
+        role=org.apache.maven.model.normalization.$role
68
+        ;;
69
+      "ModelInterpolator")
70
+        role=org.apache.maven.model.interpolation.$role
71
+        ;;
72
+      "InheritanceAssembler")
73
+        role=org.apache.maven.model.inheritance.$role
74
+        ;;
75
+      *)
76
+        role=$role
77
+        ;;
78
+    esac
79
+    echo $role
80
+}
81
+
82
+function generate_xml() {
83
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
84
+echo "<component-set>"
85
+echo "<components>"
86
+
87
+for file in `find -name '*.java'`; do
88
+  annot=`grep "@Component" $file`
89
+  if [ "$?" == "0" ]; then
90
+    # We have a component!
91
+    role=$(echo $annot | sed 's|.*role = \(.*\).class.*|\1|')
92
+    role_hint=$(echo $annot | sed 's|.*hint = "\(.*\)" .*|\1|')
93
+    if [ "$role_hint" = "$annot" ]; then
94
+      role_hint=default
95
+    fi
96
+    implem=$(echo $file | sed -e 's|^\./||' -e 's|\.java||' -e 's|/|.|g')
97
+    role=$(find_role $role)
98
+
99
+    echo "<component>"
100
+    echo "  <role>$role</role>"
101
+    echo "  <role-hint>$role_hint</role-hint>"
102
+    echo "  <implementation>$implem</implementation>"
103
+    echo "  <description />"
104
+    echo "  <isolated-realm>false</isolated-realm>"
105
+    echo "  <requirements>"
106
+    reqn=1
107
+    cont=true
108
+    while [ "$cont" = "true" ]; do
109
+      requirement=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
110
+      ((reqn++))
111
+      property=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
112
+      if (echo $requirement | grep "@Requirement" >/dev/null); then
113
+        ((reqn++))
114
+        ((reqn++))
115
+        optional=$(echo $requirement | sed 's|.*optional = \(.*\) .*|\1|')
116
+        req_role=$(echo $requirement | sed 's|.*role = \(.*\).class .*|\1|')
117
+        if (echo $req_role | grep "@Requirement" >/dev/null); then
118
+          req_role=$(echo $property | sed 's|.*private \(.*\) .*|\1|')
119
+        fi
120
+        req_role=$(find_role $req_role)
121
+        req_name=$(echo $property | sed 's|[^ ]* [^ ]* \([^ ;]*\).*|\1|')
122
+        echo "    <requirement>"
123
+        echo "      <role>$req_role</role>"
124
+        echo "      <field-name>$req_name</field-name>"
125
+        if (echo $optional | grep "@Requirement" >/dev/null); then
126
+          :
127
+        else
128
+          echo "      <optional>$optional</optional>"
129
+        fi
130
+        echo "    </requirement>"
131
+      else
132
+        cont=false
133
+      fi
134
+    done
135
+    echo "  </requirements>"
136
+    echo "</component>"
137
+  fi
138
+done
139
+
140
+echo "</components>"
141
+echo "</component-set>"
142
+}
143
+
144
+(cd $1; generate_xml) > $2
145
-- 
146
2.14.1
147
148