Former-commit-id:9f19e3f712
[formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f] Former-commit-id:06a8b51d6d
150 lines
4.3 KiB
Python
Executable file
150 lines
4.3 KiB
Python
Executable file
#!/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()
|