but why do you duplicate below functions?
+    Prepare(options, sanitized_name)
+    CustomizeXML(options, sanitized_name)
+    CustomizeJava(options, sanitized_name)
+    CustomizeExtensions(options)

I don't think it's a good way. @junmin-zhu any comment?