Skip to content

Commit d916599

Browse files
chaorenjohnynek
authored andcommitted
Use java_import rules instead of exports_files to reference jars. (#174)
* Use java_import rules instead of exports_files to reference jars. This allows aspects on scala rules to propagate and pick up the jars. And makes it easy for other tools to recognize the jars from arbitrary files. * Get rid of all reference to exported files from @scala. Reference the java_imports directly. Buildifier'd the smaller BUILD files while we're at it.
1 parent b51e54c commit d916599

File tree

11 files changed

+184
-145
lines changed

11 files changed

+184
-145
lines changed

scala/scala.bzl

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -598,9 +598,9 @@ def _scala_junit_test_impl(ctx):
598598
_implicit_deps = {
599599
"_ijar": attr.label(executable=True, cfg="host", default=Label("@bazel_tools//tools/jdk:ijar"), allow_files=True),
600600
"_scalac": attr.label(executable=True, cfg="host", default=Label("//src/java/io/bazel/rulesscala/scalac"), allow_files=True),
601-
"_scalalib": attr.label(default=Label("@scala//:lib/scala-library.jar"), single_file=True, allow_files=True),
602-
"_scalacompiler": attr.label(default=Label("@scala//:lib/scala-compiler.jar"), single_file=True, allow_files=True),
603-
"_scalareflect": attr.label(default=Label("@scala//:lib/scala-reflect.jar"), single_file=True, allow_files=True),
601+
"_scalalib": attr.label(default=Label("@scala//:scala-library"), single_file=True, allow_files=True),
602+
"_scalacompiler": attr.label(default=Label("@scala//:scala-compiler"), single_file=True, allow_files=True),
603+
"_scalareflect": attr.label(default=Label("@scala//:scala-reflect"), single_file=True, allow_files=True),
604604
"_java": attr.label(executable=True, cfg="host", default=Label("@bazel_tools//tools/jdk:java"), allow_files=True),
605605
"_javac": attr.label(executable=True, cfg="host", default=Label("@bazel_tools//tools/jdk:javac"), allow_files=True),
606606
"_jar": attr.label(executable=True, cfg="host", default=Label("//src/java/io/bazel/rulesscala/jar:binary_deploy.jar"), allow_files=True),
@@ -670,9 +670,9 @@ scala_test = rule(
670670
attrs={
671671
"main_class": attr.string(default="org.scalatest.tools.Runner"),
672672
"suites": attr.string_list(),
673-
"_scalatest": attr.label(default=Label("@scalatest//file"), single_file=True, allow_files=True),
673+
"_scalatest": attr.label(default=Label("@scalatest//jar"), single_file=True, allow_files=True),
674674
"_scalatest_reporter": attr.label(default=Label("//scala/support:test_reporter")),
675-
"_scalaxml": attr.label(default=Label("@scala//:lib/scala-xml_2.11-1.0.4.jar"), single_file=True, allow_files=True),
675+
"_scalaxml": attr.label(default=Label("@scala//:scala-xml"), single_file=True, allow_files=True),
676676
} + _implicit_deps + _common_attrs,
677677
outputs={
678678
"jar": "%{name}.jar",
@@ -703,46 +703,33 @@ def scala_mvn_artifact(artifact):
703703

704704
SCALA_BUILD_FILE = """
705705
# scala.BUILD
706-
exports_files([
707-
"bin/scala",
708-
"bin/scalac",
709-
"bin/scaladoc",
710-
"lib/config-1.2.1.jar",
711-
"lib/jline-2.12.1.jar",
712-
"lib/scala-actors-2.11.0.jar",
713-
"lib/scala-actors-migration_2.11-1.1.0.jar",
714-
"lib/scala-compiler.jar",
715-
"lib/scala-continuations-library_2.11-1.0.2.jar",
716-
"lib/scala-continuations-plugin_2.11.8-1.0.2.jar",
717-
"lib/scala-library.jar",
718-
"lib/scala-parser-combinators_2.11-1.0.4.jar",
719-
"lib/scala-reflect.jar",
720-
"lib/scala-swing_2.11-1.0.2.jar",
721-
"lib/scala-xml_2.11-1.0.4.jar",
722-
"lib/scalap-2.11.8.jar",
723-
])
724-
725-
filegroup(
706+
java_import(
726707
name = "scala-xml",
727-
srcs = ["lib/scala-xml_2.11-1.0.4.jar"],
708+
jars = ["lib/scala-xml_2.11-1.0.4.jar"],
728709
visibility = ["//visibility:public"],
729710
)
730711
731-
filegroup(
712+
java_import(
732713
name = "scala-parser-combinators",
733-
srcs = ["lib/scala-parser-combinators_2.11-1.0.4.jar"],
714+
jars = ["lib/scala-parser-combinators_2.11-1.0.4.jar"],
734715
visibility = ["//visibility:public"],
735716
)
736717
737-
filegroup(
718+
java_import(
738719
name = "scala-library",
739-
srcs = ["lib/scala-library.jar"],
720+
jars = ["lib/scala-library.jar"],
740721
visibility = ["//visibility:public"],
741722
)
742723
743-
filegroup(
724+
java_import(
725+
name = "scala-compiler",
726+
jars = ["lib/scala-compiler.jar"],
727+
visibility = ["//visibility:public"],
728+
)
729+
730+
java_import(
744731
name = "scala-reflect",
745-
srcs = ["lib/scala-reflect.jar"],
732+
jars = ["lib/scala-reflect.jar"],
746733
visibility = ["//visibility:public"],
747734
)
748735
"""
@@ -755,7 +742,8 @@ def scala_repositories():
755742
url = "http://bazel-mirror.storage.googleapis.com/downloads.typesafe.com/scala/2.11.8/scala-2.11.8.tgz",
756743
build_file_content = SCALA_BUILD_FILE,
757744
)
758-
native.http_file(
745+
746+
native.http_jar(
759747
name = "scalatest",
760748
url = "http://bazel-mirror.storage.googleapis.com/oss.sonatype.org/content/groups/public/org/scalatest/scalatest_2.11/2.2.6/scalatest_2.11-2.2.6.jar",
761749
sha256 = "f198967436a5e7a69cfd182902adcfbcb9f2e41b349e1a5c8881a2407f615962",
@@ -786,6 +774,8 @@ def scala_repositories():
786774

787775
native.bind(name = 'io_bazel_rules_scala/dependency/scala/scala_library', actual = '@scala//:scala-library')
788776

777+
native.bind(name = 'io_bazel_rules_scala/dependency/scala/scala_compiler', actual = '@scala//:scala-compiler')
778+
789779
native.bind(name = 'io_bazel_rules_scala/dependency/scala/scala_reflect', actual = '@scala//:scala-reflect')
790780

791781
def scala_export_to_java(name, exports, runtime_deps):
@@ -797,7 +787,7 @@ def scala_export_to_java(name, exports, runtime_deps):
797787
name = name,
798788
# these are the outputs of the scala_library targets
799789
jars = jars,
800-
runtime_deps = ["@scala//:lib/scala-library.jar"] + runtime_deps
790+
runtime_deps = ["@scala//:scala-library"] + runtime_deps
801791
)
802792

803793
def _sanitize_string_for_usage(s):

scala/support/BUILD

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
load("//scala:scala.bzl", "scala_library")
22

3-
4-
scala_library(name = "test_reporter",
5-
srcs = ["JUnitXmlReporter.scala"],
6-
deps = ["@scalatest//file", "//src/scala:scala_xml"],
7-
visibility = ["//visibility:public"],
8-
)
3+
scala_library(
4+
name = "test_reporter",
5+
srcs = ["JUnitXmlReporter.scala"],
6+
visibility = ["//visibility:public"],
7+
deps = [
8+
"@scala//:scala-xml",
9+
"@scalatest//jar",
10+
],
11+
)
Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
java_binary(name = "scalac",
2-
main_class = "io.bazel.rulesscala.scalac.ScalaCInvoker",
3-
srcs = ["ScalaCInvoker.java", "CompileOptions.java", "ScalacProcessor.java"],
4-
5-
deps = [
6-
"@scala//:lib/scala-library.jar",
7-
"@scala//:lib/scala-reflect.jar",
8-
"@scala//:lib/scala-compiler.jar",
9-
"//src/java/io/bazel/rulesscala/jar",
10-
"//src/java/io/bazel/rulesscala/worker",
11-
"//src/java/com/google/devtools/build/lib:worker",
12-
],
13-
visibility = ["//visibility:public"],
1+
java_binary(
2+
name = "scalac",
3+
srcs = [
4+
"CompileOptions.java",
5+
"ScalaCInvoker.java",
6+
"ScalacProcessor.java",
7+
],
8+
main_class = "io.bazel.rulesscala.scalac.ScalaCInvoker",
9+
visibility = ["//visibility:public"],
10+
deps = [
11+
"//src/java/com/google/devtools/build/lib:worker",
12+
"//src/java/io/bazel/rulesscala/jar",
13+
"//src/java/io/bazel/rulesscala/worker",
14+
"@scala//:scala-compiler",
15+
"@scala//:scala-library",
16+
"@scala//:scala-reflect",
17+
],
1418
)

src/scala/BUILD

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
load("//scala:scala.bzl", "scala_binary", "scala_library")
22

33
scala_library(
4-
name = "benchmark_generator_lib",
5-
srcs = ["BenchmarkGenerator.scala"],
6-
deps = [
7-
"//external:io_bazel_rules_scala/dependency/jmh/jmh_core",
8-
"//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_asm",
9-
"//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_reflection",
10-
"//external:io_bazel_rules_scala/dependency/jmh/org_ows2_asm_asm",
11-
"//src/scala:scala_compiler",
12-
"//src/java/io/bazel/rulesscala/io_utils",
13-
"//src/java/io/bazel/rulesscala/jar",
14-
],
15-
visibility = ["//visibility:public"],
4+
name = "benchmark_generator_lib",
5+
srcs = ["BenchmarkGenerator.scala"],
6+
visibility = ["//visibility:public"],
7+
deps = [
8+
"//external:io_bazel_rules_scala/dependency/jmh/jmh_core",
9+
"//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_asm",
10+
"//external:io_bazel_rules_scala/dependency/jmh/jmh_generator_reflection",
11+
"//external:io_bazel_rules_scala/dependency/jmh/org_ows2_asm_asm",
12+
"//src/java/io/bazel/rulesscala/io_utils",
13+
"//src/java/io/bazel/rulesscala/jar",
14+
"@scala//:scala-compiler",
15+
],
1616
)
1717

1818
scala_binary(
19-
name = "benchmark_generator",
20-
main_class = "io.bazel.rules_scala.jmh_support.BenchmarkGenerator",
21-
deps = [":benchmark_generator_lib"],
22-
visibility = ["//visibility:public"],
19+
name = "benchmark_generator",
20+
main_class = "io.bazel.rules_scala.jmh_support.BenchmarkGenerator",
21+
visibility = ["//visibility:public"],
22+
deps = [":benchmark_generator_lib"],
2323
)
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
load("//scala:scala.bzl", "scala_library")
22

33
scala_library(
4-
name = "compiler",
5-
srcs = ["Compiler.scala"],
6-
deps = [
7-
"//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator",
8-
"//external:io_bazel_rules_scala/dependency/thrift/util_core",
9-
"//external:io_bazel_rules_scala/dependency/thrift/util_logging",
10-
"//src/scala:parser_combinators",
11-
":focused_zip_importer",
12-
],
13-
visibility = ["//visibility:public"],
4+
name = "compiler",
5+
srcs = ["Compiler.scala"],
6+
visibility = ["//visibility:public"],
7+
deps = [
8+
":focused_zip_importer",
9+
"//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator",
10+
"//external:io_bazel_rules_scala/dependency/thrift/util_core",
11+
"//external:io_bazel_rules_scala/dependency/thrift/util_logging",
12+
"@scala//:scala-parser-combinators",
13+
],
1414
)
1515

1616
scala_library(
17-
name = "focused_zip_importer",
18-
srcs = ["FocusedZipImporter.scala"],
19-
deps = [
20-
"//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator",
21-
],
22-
visibility = ["//visibility:public"],
17+
name = "focused_zip_importer",
18+
srcs = ["FocusedZipImporter.scala"],
19+
visibility = ["//visibility:public"],
20+
deps = [
21+
"//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator",
22+
],
2323
)
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
load("//scala:scala.bzl", "scala_binary", "scala_library")
22

33
scala_library(
4-
name = "tut_compiler_lib",
5-
srcs = ["TutCompiler.scala"],
6-
deps = [
7-
"//external:io_bazel_rules_scala/dependency/tut/tut_core",
8-
"//src/scala:scala_compiler",
9-
"//src/java/io/bazel/rulesscala/io_utils",
10-
],
11-
visibility = ["//visibility:public"],
4+
name = "tut_compiler_lib",
5+
srcs = ["TutCompiler.scala"],
6+
visibility = ["//visibility:public"],
7+
deps = [
8+
"//external:io_bazel_rules_scala/dependency/tut/tut_core",
9+
"//src/java/io/bazel/rulesscala/io_utils",
10+
"@scala//:scala-compiler",
11+
],
1212
)
1313

1414
scala_binary(
15-
name = "tut_compiler",
16-
main_class = "io.bazel.rules_scala.tut_support.TutCompiler",
17-
deps = [":tut_compiler_lib"],
18-
visibility = ["//visibility:public"],
15+
name = "tut_compiler",
16+
main_class = "io.bazel.rules_scala.tut_support.TutCompiler",
17+
visibility = ["//visibility:public"],
18+
deps = [":tut_compiler_lib"],
1919
)

src/scala/scripts/BUILD

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
load("//scala:scala.bzl", "scala_binary", "scala_library")
22

33
scala_library(
4-
name = "generator_lib",
5-
srcs = ["TwitterScroogeGenerator.scala"],
6-
deps = [
7-
"//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator",
8-
"//external:io_bazel_rules_scala/dependency/thrift/util_core",
9-
"//external:io_bazel_rules_scala/dependency/thrift/util_logging",
10-
"//src/scala/io/bazel/rules_scala/scrooge_support:compiler",
11-
"//src/scala:parser_combinators",
12-
"//src/java/io/bazel/rulesscala/jar",
13-
"//src/java/io/bazel/rulesscala/worker",
14-
"//src/java/io/bazel/rulesscala/io_utils",
15-
],
16-
visibility = ["//visibility:public"],
4+
name = "generator_lib",
5+
srcs = ["TwitterScroogeGenerator.scala"],
6+
visibility = ["//visibility:public"],
7+
deps = [
8+
"//external:io_bazel_rules_scala/dependency/thrift/scrooge_generator",
9+
"//external:io_bazel_rules_scala/dependency/thrift/util_core",
10+
"//external:io_bazel_rules_scala/dependency/thrift/util_logging",
11+
"//src/java/io/bazel/rulesscala/io_utils",
12+
"//src/java/io/bazel/rulesscala/jar",
13+
"//src/java/io/bazel/rulesscala/worker",
14+
"//src/scala/io/bazel/rules_scala/scrooge_support:compiler",
15+
"@scala//:scala-parser-combinators",
16+
],
1717
)
1818

1919
scala_binary(
20-
name = "generator",
21-
main_class = "scripts.ScroogeWorker",
22-
deps = [
23-
":generator_lib",
24-
],
25-
visibility = ["//visibility:public"],
20+
name = "generator",
21+
main_class = "scripts.ScroogeWorker",
22+
visibility = ["//visibility:public"],
23+
deps = [
24+
":generator_lib",
25+
],
2626
)

test/BUILD

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@ java_binary(
2727
java_import(
2828
name = "lib_import",
2929
# these are the outputs of the scala_library targets
30-
jars = [":HelloLib_deploy.jar",
31-
"OtherLib_deploy.jar",
32-
"Exported_deploy.jar",
33-
"Runtime_deploy.jar",
34-
],
35-
runtime_deps = ["org_scala_lang__scala_library", "OtherJavaLib"]
30+
jars = [
31+
":HelloLib_deploy.jar",
32+
"OtherLib_deploy.jar",
33+
"Exported_deploy.jar",
34+
"Runtime_deploy.jar",
35+
],
36+
runtime_deps = [
37+
"OtherJavaLib",
38+
"@scala//:scala-library",
39+
],
3640
)
3741

3842
scala_export_to_java(
@@ -52,11 +56,6 @@ java_binary(
5256
deps = [":lib_import_2"],
5357
)
5458

55-
java_import(
56-
name = "org_scala_lang__scala_library",
57-
jars = ["@scala//:lib/scala-library.jar"]
58-
)
59-
6059
scala_binary(
6160
name = "ScalaBinary",
6261
srcs = ["ScalaBinary.scala"],

test/aspect/BUILD

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
load(":aspect.bzl", "aspect_test")
2+
load("//scala:scala.bzl", "scala_test")
3+
4+
aspect_test(
5+
name = "test",
6+
scala_rule = ":dummy",
7+
)
8+
9+
scala_test(name = "dummy")

0 commit comments

Comments
 (0)