Revert "Buck: Wipe out the machinery for merging JARs"
We need it again after the upgrade to Lucene 5.4.1.
This reverts commit 08cc835f99
.
Change-Id: I1798907e5e792005e6b78fcf9bbaaf36535d711b
This commit is contained in:
parent
3f6d7b141b
commit
3ec838e578
@ -147,3 +147,31 @@ def maven_jar(
|
||||
source_jar = ':%s__download_src' % name if srcjar else None,
|
||||
visibility = visibility,
|
||||
)
|
||||
|
||||
|
||||
def merge_maven_jars(
|
||||
name,
|
||||
srcs,
|
||||
visibility = []):
|
||||
|
||||
def cmd(jars):
|
||||
return ('$(location //tools:merge_jars) $OUT '
|
||||
+ ' '.join(['$(location %s)' % j for j in jars]))
|
||||
|
||||
genrule(
|
||||
name = '%s__merged_bin' % name,
|
||||
cmd = cmd(['%s__download_bin' % s for s in srcs]),
|
||||
out = '%s__merged.jar' % name,
|
||||
)
|
||||
genrule(
|
||||
name = '%s__merged_src' % name,
|
||||
cmd = cmd(['%s__download_src' % s for s in srcs]),
|
||||
# tools/eclipse/project.py requires -src.jar suffix.
|
||||
out = '%s__merged-src.jar' % name,
|
||||
)
|
||||
prebuilt_jar(
|
||||
name = name,
|
||||
binary_jar = ':%s__merged_bin' % name,
|
||||
source_jar = ':%s__merged_src' % name,
|
||||
visibility = visibility,
|
||||
)
|
||||
|
@ -5,6 +5,12 @@ python_binary(
|
||||
visibility = ['PUBLIC'],
|
||||
)
|
||||
|
||||
python_binary(
|
||||
name = 'merge_jars',
|
||||
main = 'merge_jars.py',
|
||||
visibility = ['PUBLIC'],
|
||||
)
|
||||
|
||||
python_binary(
|
||||
name = 'pack_war',
|
||||
main = 'pack_war.py',
|
||||
|
50
tools/merge_jars.py
Executable file
50
tools/merge_jars.py
Executable file
@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (C) 2015 The Android Open Source Project
|
||||
#
|
||||
# Licensed 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.
|
||||
|
||||
from __future__ import print_function
|
||||
import collections
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
print('usage: %s <out.zip> <in.zip>...' % sys.argv[0], file=sys.stderr)
|
||||
exit(1)
|
||||
|
||||
outfile = sys.argv[1]
|
||||
infiles = sys.argv[2:]
|
||||
seen = set()
|
||||
SERVICES = 'META-INF/services/'
|
||||
|
||||
try:
|
||||
with zipfile.ZipFile(outfile, 'w') as outzip:
|
||||
services = collections.defaultdict(lambda: '')
|
||||
for infile in infiles:
|
||||
with zipfile.ZipFile(infile) as inzip:
|
||||
for info in inzip.infolist():
|
||||
n = info.filename
|
||||
if n in seen:
|
||||
continue
|
||||
elif n.startswith(SERVICES):
|
||||
# Concatenate all provider configuration files.
|
||||
services[n] += inzip.read(n)
|
||||
continue
|
||||
outzip.writestr(info, inzip.read(n))
|
||||
seen.add(n)
|
||||
|
||||
for n, v in services.iteritems():
|
||||
outzip.writestr(n, v)
|
||||
except Exception as err:
|
||||
exit('Failed to merge jars: %s' % err)
|
Loading…
Reference in New Issue
Block a user