summaryrefslogtreecommitdiff
path: root/java/genpom
diff options
context:
space:
mode:
Diffstat (limited to 'java/genpom')
-rwxr-xr-xjava/genpom150
1 files changed, 150 insertions, 0 deletions
diff --git a/java/genpom b/java/genpom
new file mode 100755
index 0000000000..e3b89d0568
--- /dev/null
+++ b/java/genpom
@@ -0,0 +1,150 @@
+#!/usr/bin/python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+import sys, re, os, mllib, optparse
+
+def die(msg):
+ print >> sys.stderr, msg
+ sys.exit(1)
+
+parser = optparse.OptionParser(usage="usage: %prog [options] JARs ...",
+ description="Generates a pom.")
+parser.add_option("-n", "--name")
+parser.add_option("-g", "--group")
+parser.add_option("-a", "--artifact")
+parser.add_option("-v", "--version")
+parser.add_option("-d", "--description", default="")
+parser.add_option("-u", "--url", default="")
+parser.add_option("-i", "--ignore", action="store_true", help="ignore missing poms")
+parser.add_option("-s", "--search-path", action="append",
+ help="the path to search for poms")
+parser.add_option("-S", "--scope", metavar="ARTIFACT=SCOPE", action="append",
+ default=[],
+ help="specify scope for an artifact")
+parser.add_option("-o", "--output")
+
+opts, jars = parser.parse_args()
+
+if opts.search_path is None:
+ path=["%s/.m2" % os.environ["HOME"]]
+else:
+ path = []
+ for p in opts.search_path:
+ path.extend(p.split(":"))
+
+expanded_path = []
+for p in path:
+ os.path.walk(p, lambda a, d, fs: expanded_path.append(d), None)
+
+if opts.group is None:
+ die("the group option is required")
+
+if opts.version is None:
+ die("the version option is required")
+
+if opts.name is None and opts.artifact is None:
+ die("one of name or artifact must be supplied")
+
+if opts.name is None:
+ opts.name = opts.artifact
+
+if opts.artifact is None:
+ opts.artifact = opts.name
+
+def lookup(pom, attr):
+ nd = pom["project"][attr]
+ if nd is None:
+ nd = pom["project/parent"][attr]
+ if nd is None:
+ return None
+ return nd.text()
+
+def search(path, file):
+ for d in path:
+ f = os.path.join(d, file)
+ if os.path.exists(f):
+ return mllib.xml_parse(f)
+
+scopes = {}
+for s in opts.scope:
+ m = re.match(r"(.*)=(.*)", s)
+ if not m:
+ die("bad scope specifier: %s" % s)
+ scopes[m.group(1)] = m.group(2)
+
+deps = []
+for jar in jars:
+ base, ext = os.path.splitext(os.path.basename(jar))
+ pom = search(expanded_path, "%s.pom" % base)
+ if pom is None:
+ if opts.ignore:
+ continue
+ else:
+ die("unable to locate pom for %s" % jar)
+ group = lookup(pom, "groupId")
+ artifactId = lookup(pom, "artifactId")
+ version = lookup(pom, "version")
+ deps.append("""
+ <dependency>
+ <groupId>%s</groupId>
+ <artifactId>%s</artifactId>
+ <version>%s</version>
+ <scope>%s</scope>
+ </dependency>
+""" % (group, artifactId, version,
+ scopes.get(artifactId, "compile")))
+
+TEMPLATE = """<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd ">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>%(group)s</groupId>
+ <artifactId>%(artifact)s</artifactId>
+ <version>%(version)s</version>
+ <name>%(name)s</name>
+ <url>%(url)s</url>
+ <description>%(description)s</description>
+ <organization>
+ <name>The Apache Software Foundation</name>
+ <url>http://www.apache.org</url>
+ </organization>
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>/LICENSE.txt</url>
+ </license>
+ </licenses>
+ <dependencies>
+ %(dependencies)s
+ </dependencies>
+</project>
+"""
+
+vars = {}
+vars.update(opts.__dict__)
+vars["dependencies"] = "".join(deps)
+
+if opts.output is None:
+ out = sys.stdout
+else:
+ out = open(opts.output, "w")
+out.write(TEMPLATE % vars)
+out.close()