Files
gerrit/gerrit-plugin-api/BUCK
David Ostrovsky 29f95395d5 Plugin API: Provide custom manifest file
If no manifest file is specified, Buck's java_binary() rule merges the
content of manifest files from the dependant JARs into output
META/MANIFEST.MF. Normally we wouldn't care that it ends up with a lot
of mess, but unfortunately, it breaks the plugin-api.jar, with sealed
package exception, so we do care.

This happens because we provide the same package in multiple JARs, e.g.

  com.gerrit.server.project

is shipped with plugin-api.jar, obviously, but it happens that one file
Util.class, from the same package is shipped in the

  gerrit-acceptance-framework.jar

artifact. Normally it doesn't matter, unless a JAR is defined as sealed
in which case security violation exception is thrown during unit tests
execution.

To rectify this, we use the combination of custom manifest_file
attribute of java_binary() rule and passing non documented option from
this issue: [1] to ask Buck to not merge manifest files from the
dependant JARs.

With this fix, plugin unit tests executions in standalone build mode
work again.

* [1] https://github.com/facebook/buck/issues/86

Change-Id: I7b7571c20dcf6b54210b73760eccc8e699e6f1f6
2016-08-22 03:15:05 +00:00

87 lines
2.0 KiB
Python

SRCS = [
'gerrit-server/src/main/java/',
'gerrit-httpd/src/main/java/',
'gerrit-sshd/src/main/java/',
]
PLUGIN_API = [
'//gerrit-httpd:httpd',
'//gerrit-pgm:init-api',
'//gerrit-server:server',
'//gerrit-sshd:sshd',
]
java_binary(
name = 'plugin-api',
merge_manifests = False,
manifest_file = ':manifest',
deps = [':lib'],
visibility = ['PUBLIC'],
)
genrule(
name = 'manifest',
cmd = 'echo "Manifest-Version: 1.0" >$OUT;' +
'echo "Implementation-Title: Gerrit Plugin API" >>$OUT;' +
'echo "Implementation-Vendor: Gerrit Code Review Project" >>$OUT',
out = 'manifest.txt',
)
java_library(
name = 'lib',
exported_deps = PLUGIN_API + [
'//gerrit-antlr:query_exception',
'//gerrit-antlr:query_parser',
'//gerrit-common:annotations',
'//gerrit-common:server',
'//gerrit-extension-api:api',
'//gerrit-gwtexpui:server',
'//gerrit-reviewdb:server',
'//lib:args4j',
'//lib:blame-cache',
'//lib:gson',
'//lib:guava',
'//lib:gwtorm',
'//lib:jsch',
'//lib:mime-util',
'//lib:servlet-api-3_1',
'//lib:velocity',
'//lib/commons:lang',
'//lib/dropwizard:dropwizard-core',
'//lib/guice:guice',
'//lib/guice:guice-assistedinject',
'//lib/guice:guice-servlet',
'//lib/jgit/org.eclipse.jgit:jgit',
'//lib/jgit/org.eclipse.jgit.http.server:jgit-servlet',
'//lib/joda:joda-time',
'//lib/log:api',
'//lib/mina:sshd',
'//lib/prolog:compiler',
],
visibility = ['PUBLIC'],
)
java_binary(
name = 'plugin-api-src',
deps = [
'//gerrit-extension-api:extension-api-src',
] + [d + '-src' for d in PLUGIN_API],
visibility = ['PUBLIC'],
)
java_doc(
name = 'plugin-api-javadoc',
title = 'Gerrit Review Plugin API Documentation',
pkgs = ['com.google.gerrit'],
paths = [n for n in SRCS],
srcs = glob([n + '**/*.java' for n in SRCS]),
deps = [
':plugin-api',
'//lib/bouncycastle:bcprov',
'//lib/bouncycastle:bcpg',
'//lib/bouncycastle:bcpkix',
],
visibility = ['PUBLIC'],
do_it_wrong = True,
)