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 |