Fix Eclipse project generation
Replace the python script with shell wrapper around bazlets script.
Fix the Eclipse build rules to properly include test dependencies.
Change-Id: I8790bfe6b7855d28ed629d87c2127ec14433d984
diff --git a/.gitignore b/.gitignore
index 898d584..fe0be47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
/.classpath
-/.primary_build_tool
/.project
/.settings/org.maven.ide.eclipse.prefs
/.settings/org.eclipse.m2e.core.prefs
@@ -8,4 +7,5 @@
/bazel-oauth
/bazel-out
/bazel-testlogs
+/eclipse-out
/.idea
diff --git a/BUILD b/BUILD
index 7ecd628..ea1fc3a 100644
--- a/BUILD
+++ b/BUILD
@@ -2,6 +2,7 @@
load(
"//tools/bzl:plugin.bzl",
"PLUGIN_DEPS",
+ "PLUGIN_TEST_DEPS",
"gerrit_plugin",
)
@@ -27,7 +28,16 @@
name = "oauth_tests",
srcs = glob(["src/test/java/**/*.java"]),
tags = ["oauth"],
- deps = PLUGIN_DEPS + [
+ deps = [
+ ":oauth__plugin_test_deps",
+ ],
+)
+
+java_library(
+ name = "oauth__plugin_test_deps",
+ testonly = 1,
+ visibility = ["//visibility:public"],
+ exports = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
":oauth__plugin",
"@scribe//jar",
],
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl
index c157125..0b25d23 100644
--- a/tools/bzl/plugin.bzl
+++ b/tools/bzl/plugin.bzl
@@ -1,5 +1,6 @@
load(
"@com_googlesource_gerrit_bazlets//:gerrit_plugin.bzl",
"PLUGIN_DEPS",
+ "PLUGIN_TEST_DEPS",
"gerrit_plugin",
)
diff --git a/tools/eclipse/BUILD b/tools/eclipse/BUILD
index 261c411..f744058 100644
--- a/tools/eclipse/BUILD
+++ b/tools/eclipse/BUILD
@@ -1,14 +1,9 @@
-load("//tools/bzl:plugin.bzl", "PLUGIN_DEPS", "gerrit_plugin")
load("//tools/bzl:classpath.bzl", "classpath_collector")
-java_library(
- name = "classpath",
- runtime_deps = PLUGIN_DEPS + [
- "//:oauth__plugin",
- ],
-)
-
classpath_collector(
name = "main_classpath_collect",
- deps = PLUGIN_DEPS + ["//:oauth__plugin"],
+ testonly = 1,
+ deps = [
+ "//:oauth__plugin_test_deps",
+ ],
)
diff --git a/tools/eclipse/project.py b/tools/eclipse/project.py
deleted file mode 100755
index a98c35a..0000000
--- a/tools/eclipse/project.py
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/env python
-# Copyright (C) 2016 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
-# TODO(davido): use Google style for importing instead:
-# import optparse
-# ...
-# optparse.OptionParser
-from optparse import OptionParser
-from os import environ, path, makedirs
-from subprocess import CalledProcessError, check_call, check_output
-from xml.dom import minidom
-import re
-import sys
-
-MAIN = '//tools/eclipse:classpath'
-JRE = '/'.join([
- 'org.eclipse.jdt.launching.JRE_CONTAINER',
- 'org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType',
- 'JavaSE-1.8',
-])
-# Map of targets to corresponding classpath collector rules
-cp_targets = {
- MAIN: '//tools/eclipse:main_classpath_collect',
-}
-
-ROOT = path.abspath(__file__)
-while not path.exists(path.join(ROOT, 'WORKSPACE')):
- ROOT = path.dirname(ROOT)
-
-opts = OptionParser()
-opts.add_option('--name', help='name of the generated project',
- action='store', default='gerrit-oauth-provider', dest='project_name')
-args, _ = opts.parse_args()
-
-def retrieve_ext_location():
- return check_output(['bazel', 'info', 'output_base']).strip()
-
-def gen_primary_build_tool():
- bazel = check_output(['which', 'bazel']).strip()
- with open(path.join(ROOT, ".primary_build_tool"), 'w') as fd:
- fd.write("bazel=%s\n" % bazel)
- fd.write("PATH=%s\n" % environ["PATH"])
-
-def _query_classpath(target):
- deps = []
- t = cp_targets[target]
- try:
- check_call(['bazel', 'build', t])
- except CalledProcessError:
- exit(1)
- name = 'bazel-bin/tools/eclipse/' + t.split(':')[1] + '.runtime_classpath'
- deps = [line.rstrip('\n') for line in open(name)]
- return deps
-
-def gen_project(name='gerrit', root=ROOT):
- p = path.join(root, '.project')
- with open(p, 'w') as fd:
- print("""\
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>%(name)s</name>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>\
- """ % {"name": name}, file=fd)
-
-def gen_classpath(ext):
- def make_classpath():
- impl = minidom.getDOMImplementation()
- return impl.createDocument(None, 'classpath', None)
-
- def classpathentry(kind, path, src=None, out=None, exported=None):
- e = doc.createElement('classpathentry')
- e.setAttribute('kind', kind)
- # TODO(davido): Remove this and other exclude BUILD files hack
- # when this Bazel bug is fixed:
- # https://github.com/bazelbuild/bazel/issues/1083
- if kind == 'src':
- e.setAttribute('excluding', '**/BUILD')
- e.setAttribute('path', path)
- if src:
- e.setAttribute('sourcepath', src)
- if out:
- e.setAttribute('output', out)
- if exported:
- e.setAttribute('exported', 'true')
- doc.documentElement.appendChild(e)
-
- doc = make_classpath()
- src = set()
- lib = set()
-
- # Classpath entries are absolute for cross-cell support
- java_library = re.compile('bazel-out/local-fastbuild/bin/lib[^/]+[.]jar$')
- srcs = re.compile('(.*/external/[^/]+)/jar/(.*)[.]jar')
- for p in _query_classpath(MAIN):
- m = java_library.match(p)
- if m:
- src.add(".")
- else:
- if p.startswith("external"):
- p = path.join(ext, p)
- lib.add(p)
-
- for s in sorted(src):
- out = None
-
- if s.startswith('lib/'):
- out = 'eclipse-out/lib'
-
- p = path.join(s, 'java')
- if path.exists(p):
- classpathentry('src', p, out=out)
- continue
-
- for env in ['main', 'test']:
- o = None
- if out:
- o = out + '/' + env
- elif env == 'test':
- o = 'eclipse-out/test'
-
- for srctype in ['java', 'resources']:
- p = path.join(s, 'src', env, srctype)
- if path.exists(p):
- classpathentry('src', p, out=o)
-
- for libs in [lib]:
- for j in sorted(libs):
- s = None
- m = srcs.match(j)
- if m:
- prefix = m.group(1)
- suffix = m.group(2)
- p = path.join(prefix, "src", "%s-src.jar" % suffix)
- if path.exists(p):
- s = p
- classpathentry('lib', j, s)
-
- classpathentry('con', JRE)
- classpathentry('output', 'eclipse-out/classes')
-
- p = path.join(ROOT, '.classpath')
- with open(p, 'w') as fd:
- doc.writexml(fd, addindent='\t', newl='\n', encoding='UTF-8')
-
-try:
- ext_location = retrieve_ext_location()
- gen_project(args.project_name)
- gen_classpath(ext_location)
- gen_primary_build_tool()
-
- try:
- check_call(['bazel', 'build', MAIN])
- except CalledProcessError:
- exit(1)
-except KeyboardInterrupt:
- print('Interrupted by user', file=sys.stderr)
- exit(1)
diff --git a/tools/eclipse/project.sh b/tools/eclipse/project.sh
new file mode 100755
index 0000000..8e4ed79
--- /dev/null
+++ b/tools/eclipse/project.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# Copyright (C) 2017 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.
+`bazel query @com_googlesource_gerrit_bazlets//tools/eclipse:project --output location | sed s/BUILD:.*//`project.py -n oauth -r .