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 |