diff --git a/.bazelignore b/.bazelignore
new file mode 100644
index 00000000..4beab30f
--- /dev/null
+++ b/.bazelignore
@@ -0,0 +1,10 @@
+target
+caliper/target
+caliper-api/target
+caliper-core/target
+caliper-examples/target
+caliper-runner/target
+caliper-util/target
+caliper-worker/target
+caliper-worker-android/target
+caliper-worker-jvm/target
diff --git a/.bazelversion b/.bazelversion
new file mode 100644
index 00000000..e5b82034
--- /dev/null
+++ b/.bazelversion
@@ -0,0 +1 @@
+3.5.0
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 35f28953..18d94c5d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,8 @@ out/
.factorypath
.project
.settings/
+
+# Bazel
+bazel-*
+.aswb
+.ijwb
diff --git a/.travis.yml b/.travis.yml
index 43637922..3377cb91 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,24 +1,31 @@
sudo: false
-language: java
-
+language: android
+android:
+ components:
+ - build-tools-26.0.2
+ - android-26
jdk:
- openjdk8
before_install:
# Travis sets this and it causes issues with workers.
- unset _JAVA_OPTIONS
- # Not actually used since we aren't building/testing the Android version, but
- # Maven still needs an absolute path or it complains.
- - export ANDROID_HOME=/
-install: mvn -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn install -U -DskipTests=true -am -pl caliper
+install:
+ - wget https://github.com/bazelbuild/bazelisk/releases/download/v1.6.1/bazelisk-linux-amd64
+ - install bazelisk-linux-amd64 ${HOME}/bin/bazel
+ - mvn -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn install -U -DskipTests=true -am -pl caliper
-script: mvn -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean verify -U -Dmaven.javadoc.skip=true -am -pl caliper
+script:
+ - mvn -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean verify -U -Dmaven.javadoc.skip=true -am -pl caliper
+ - ${HOME}/bin/bazel build //...
+ - ${HOME}/bin/bazel test //...
cache:
directories:
- $HOME/.m2
+ - $HOME/.cache/bazel
branches:
only:
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 00000000..e69de29b
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 00000000..18d36a6f
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,29 @@
+workspace(name = "caliper")
+
+load("//:maven_artifacts.bzl", "MAVEN_ARTIFACTS")
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+MAVEN_REPOSITORY_RULES_VERSION = "2.0.0-alpha-4"
+
+MAVEN_REPOSITORY_RULES_SHA = "a6484fec8d1aebd4affff7ae1ee9b59141858b2c636222bdb619526ccd8b3358"
+
+http_archive(
+ name = "maven_repository_rules",
+ sha256 = MAVEN_REPOSITORY_RULES_SHA,
+ strip_prefix = "bazel_maven_repository-%s" % MAVEN_REPOSITORY_RULES_VERSION,
+ type = "zip",
+ urls = ["https://github.com/square/bazel_maven_repository/archive/%s.zip" % MAVEN_REPOSITORY_RULES_VERSION],
+)
+
+# Setup maven repository handling.
+load("@maven_repository_rules//maven:maven.bzl", "maven_repository_specification")
+
+maven_repository_specification(
+ name = "maven",
+ artifacts = MAVEN_ARTIFACTS,
+ dependency_target_substitutes = {
+ "com.google.dagger": {"@maven//com/google/dagger:dagger": "@maven//com/google/dagger:dagger-api"},
+ },
+)
+
+android_sdk_repository(name = "androidsdk")
diff --git a/caliper-api/BUILD.bazel b/caliper-api/BUILD.bazel
new file mode 100644
index 00000000..08e49bcd
--- /dev/null
+++ b/caliper-api/BUILD.bazel
@@ -0,0 +1,9 @@
+java_library(
+ name = "caliper-api",
+ srcs = glob(["src/main/**/*.java"]),
+ deps = [
+ "@maven//com/google/guava",
+ "@maven//joda-time",
+ ],
+ visibility = ["//:__subpackages__"],
+)
\ No newline at end of file
diff --git a/caliper-api/src/test/java/com/google/caliper/model/BUILD.bazel b/caliper-api/src/test/java/com/google/caliper/model/BUILD.bazel
new file mode 100644
index 00000000..cae2d89d
--- /dev/null
+++ b/caliper-api/src/test/java/com/google/caliper/model/BUILD.bazel
@@ -0,0 +1,12 @@
+java_test(
+ name = "HostTest",
+ srcs = ["HostTest.java"],
+ deps = [
+ "//caliper-api",
+ "//caliper-util",
+ "@maven//com/google/code/gson",
+ "@maven//com/google/dagger",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper-core/BUILD.bazel b/caliper-core/BUILD.bazel
new file mode 100644
index 00000000..d203d2ac
--- /dev/null
+++ b/caliper-core/BUILD.bazel
@@ -0,0 +1,22 @@
+java_library(
+ name = "caliper-core",
+ srcs = glob(["src/main/java/**/*.java"]),
+ deps = [
+ "//caliper-api",
+ "//caliper-util",
+ "@maven//com/google/code/findbugs:jsr305",
+ "@maven//com/google/auto/value",
+ "@maven//com/google/dagger",
+ "@maven//com/google/guava",
+ "@maven//com/squareup/okhttp",
+ "@maven//joda-time",
+ ],
+ resources = glob(["src/main/resources/**"]),
+ visibility = ["//:__subpackages__"]
+)
+
+filegroup(
+ name = "test_resources",
+ srcs = glob(["src/test/resources/**"]),
+ visibility = ["//:__subpackages__"],
+)
\ No newline at end of file
diff --git a/caliper-core/src/test/java/com/google/caliper/bridge/BUILD.bazel b/caliper-core/src/test/java/com/google/caliper/bridge/BUILD.bazel
new file mode 100644
index 00000000..499be88b
--- /dev/null
+++ b/caliper-core/src/test/java/com/google/caliper/bridge/BUILD.bazel
@@ -0,0 +1,14 @@
+java_test(
+ name = "LogMessageParserTest",
+ srcs = [
+ "GcLogMessageGenerator.java",
+ "LogMessageParserTest.java"
+ ],
+ deps = [
+ "//caliper-core",
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+ resources = ["//caliper-core:test_resources"],
+)
diff --git a/caliper-core/src/test/java/com/google/caliper/memory/BUILD.bazel b/caliper-core/src/test/java/com/google/caliper/memory/BUILD.bazel
new file mode 100644
index 00000000..283f533d
--- /dev/null
+++ b/caliper-core/src/test/java/com/google/caliper/memory/BUILD.bazel
@@ -0,0 +1,9 @@
+java_test(
+ name = "ObjectGraphMeasurerTest",
+ srcs = ["ObjectGraphMeasurerTest.java"],
+ deps = [
+ "//caliper-core",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper-examples/BUILD.bazel b/caliper-examples/BUILD.bazel
new file mode 100644
index 00000000..9290067e
--- /dev/null
+++ b/caliper-examples/BUILD.bazel
@@ -0,0 +1,10 @@
+java_library(
+ name = "caliper-examples",
+ srcs = glob(["src/main/**/*.java"]),
+ visibility = ["//:__subpackages__"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-util",
+ ],
+)
diff --git a/caliper-runner/BUILD.bazel b/caliper-runner/BUILD.bazel
new file mode 100644
index 00000000..27f02393
--- /dev/null
+++ b/caliper-runner/BUILD.bazel
@@ -0,0 +1,18 @@
+java_library(
+ name = "caliper-runner",
+ srcs = glob(["src/main/**/*.java"]),
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-util",
+ "@maven//com/google/code/findbugs:jsr305",
+ "@maven//com/google/auto/value",
+ "@maven//com/google/dagger",
+ "@maven//com/google/dagger:dagger-producers",
+ "@maven//com/google/code/gson",
+ "@maven//com/google/guava",
+ "@maven//com/squareup/okhttp",
+ "@maven//joda-time",
+ ],
+ visibility = ["//:__subpackages__"]
+)
diff --git a/caliper-runner/src/test/java/com/google/caliper/runner/config/BUILD.bazel b/caliper-runner/src/test/java/com/google/caliper/runner/config/BUILD.bazel
new file mode 100644
index 00000000..465e370d
--- /dev/null
+++ b/caliper-runner/src/test/java/com/google/caliper/runner/config/BUILD.bazel
@@ -0,0 +1,12 @@
+java_test(
+ name = "LoggingConfigLoaderTest",
+ srcs = ["LoggingConfigLoaderTest.java"],
+ deps = [
+ "//caliper-api",
+ "//caliper-runner",
+ "@maven//com/google/truth",
+ "@maven//joda-time",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
diff --git a/caliper-runner/src/test/java/com/google/caliper/runner/experiment/BUILD.bazel b/caliper-runner/src/test/java/com/google/caliper/runner/experiment/BUILD.bazel
new file mode 100644
index 00000000..5a6e045f
--- /dev/null
+++ b/caliper-runner/src/test/java/com/google/caliper/runner/experiment/BUILD.bazel
@@ -0,0 +1,12 @@
+java_test(
+ name = "ExperimentTest",
+ srcs = ["ExperimentTest.java"],
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper-runner/src/test/java/com/google/caliper/runner/instrument/BUILD.bazel b/caliper-runner/src/test/java/com/google/caliper/runner/instrument/BUILD.bazel
new file mode 100644
index 00000000..cc0be896
--- /dev/null
+++ b/caliper-runner/src/test/java/com/google/caliper/runner/instrument/BUILD.bazel
@@ -0,0 +1,12 @@
+java_test(
+ name = "InstrumentModuleTest",
+ srcs = ["InstrumentModuleTest.java"],
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
diff --git a/caliper-runner/src/test/java/com/google/caliper/runner/options/BUILD.bazel b/caliper-runner/src/test/java/com/google/caliper/runner/options/BUILD.bazel
new file mode 100644
index 00000000..449882f9
--- /dev/null
+++ b/caliper-runner/src/test/java/com/google/caliper/runner/options/BUILD.bazel
@@ -0,0 +1,10 @@
+java_test(
+ name = "ParsedOptionsTest",
+ srcs = ["ParsedOptionsTest.java"],
+ deps = [
+ "//caliper-runner",
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper-runner/src/test/java/com/google/caliper/runner/resultprocessor/BUILD.bazel b/caliper-runner/src/test/java/com/google/caliper/runner/resultprocessor/BUILD.bazel
new file mode 100644
index 00000000..a9968525
--- /dev/null
+++ b/caliper-runner/src/test/java/com/google/caliper/runner/resultprocessor/BUILD.bazel
@@ -0,0 +1,11 @@
+java_test(
+ name = "ResultProcessorCreatorTest",
+ srcs = ["ResultProcessorCreatorTest.java"],
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper-runner/src/test/java/com/google/caliper/runner/server/BUILD.bazel b/caliper-runner/src/test/java/com/google/caliper/runner/server/BUILD.bazel
new file mode 100644
index 00000000..c2468969
--- /dev/null
+++ b/caliper-runner/src/test/java/com/google/caliper/runner/server/BUILD.bazel
@@ -0,0 +1,12 @@
+java_test(
+ name = "ServerSocketServiceTest",
+ srcs = ["ServerSocketServiceTest.java"],
+ deps = [
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
diff --git a/caliper-util/BUILD.bazel b/caliper-util/BUILD.bazel
new file mode 100644
index 00000000..90e8d868
--- /dev/null
+++ b/caliper-util/BUILD.bazel
@@ -0,0 +1,13 @@
+java_library(
+ name = "caliper-util",
+ srcs = glob(["src/main/**/*.java"]),
+ deps = [
+ "@maven//com/google/code/findbugs:jsr305", # provided
+ "@maven//com/google/guava",
+ "@maven//javax/inject:javax_inject",
+ "@maven//joda-time",
+ "@maven//com/google/dagger",
+ "@maven//com/google/code/gson",
+ ],
+ visibility = ["//:__subpackages__"],
+)
\ No newline at end of file
diff --git a/caliper-util/src/test/java/com/google/caliper/util/BUILD.bazel b/caliper-util/src/test/java/com/google/caliper/util/BUILD.bazel
new file mode 100644
index 00000000..47064f50
--- /dev/null
+++ b/caliper-util/src/test/java/com/google/caliper/util/BUILD.bazel
@@ -0,0 +1,19 @@
+java_test(
+ name = "ShortDurationTest",
+ srcs = ["ShortDurationTest.java"],
+ deps = [
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
+
+java_test(
+ name = "UuidsTest",
+ srcs = ["UuidsTest.java"],
+ deps = [
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
\ No newline at end of file
diff --git a/caliper-worker-android/BUILD.bazel b/caliper-worker-android/BUILD.bazel
new file mode 100644
index 00000000..a3554361
--- /dev/null
+++ b/caliper-worker-android/BUILD.bazel
@@ -0,0 +1,18 @@
+java_library(
+ name = "caliper-worker-android",
+ srcs = glob(["src/main/java/**/*.java"]),
+ deps = [
+ ":androidsdk",
+ "//caliper-core",
+ "//caliper-util",
+ "//caliper-worker",
+ "@maven//com/google/dagger",
+ "@maven//com/google/guava",
+ ],
+)
+
+java_import(
+ name = "androidsdk",
+ jars = ["@bazel_tools//tools/android:android_jar"],
+ neverlink = True,
+)
diff --git a/caliper-worker-jvm/BUILD.bazel b/caliper-worker-jvm/BUILD.bazel
new file mode 100644
index 00000000..39732c2d
--- /dev/null
+++ b/caliper-worker-jvm/BUILD.bazel
@@ -0,0 +1,16 @@
+java_library(
+ name = "caliper-worker-jvm",
+ srcs = glob(["src/main/**/*.java"]),
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-util",
+ "//caliper-worker",
+ "@maven//com/google/code/findbugs:jsr305",
+ "@maven//com/google/code/java-allocation-instrumenter:java-allocation-instrumenter",
+ "@maven//com/sun/jersey:jersey-client",
+ "@maven//com/google/dagger",
+ "@maven//com/google/guava",
+ ],
+ visibility = ["//:__subpackages__"]
+)
\ No newline at end of file
diff --git a/caliper-worker-jvm/pom.xml b/caliper-worker-jvm/pom.xml
index 2d78aa1b..79a81d57 100644
--- a/caliper-worker-jvm/pom.xml
+++ b/caliper-worker-jvm/pom.xml
@@ -62,21 +62,5 @@
com.google.code.java-allocation-instrumenter
java-allocation-instrumenter
-
- junit
- junit
- test
-
-
- com.google.truth
- truth
- test
-
-
- org.mockito
- mockito-all
- test
-
-
diff --git a/caliper-worker/BUILD.bazel b/caliper-worker/BUILD.bazel
new file mode 100644
index 00000000..b6922dc5
--- /dev/null
+++ b/caliper-worker/BUILD.bazel
@@ -0,0 +1,15 @@
+java_library(
+ name = "caliper-worker",
+ srcs = glob(["src/main/**/*.java"]),
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-util",
+ "@maven//com/google/code/findbugs:jsr305",
+ "@maven//com/google/dagger",
+ "@maven//com/google/guava",
+ "@maven//com/squareup/okhttp",
+ "@maven//joda-time",
+ ],
+ visibility = ["//:__subpackages__"]
+)
\ No newline at end of file
diff --git a/caliper-worker/src/test/java/com/google/caliper/worker/instrument/BUILD.bazel b/caliper-worker/src/test/java/com/google/caliper/worker/instrument/BUILD.bazel
new file mode 100644
index 00000000..e9373a10
--- /dev/null
+++ b/caliper-worker/src/test/java/com/google/caliper/worker/instrument/BUILD.bazel
@@ -0,0 +1,22 @@
+java_test(
+ name = "BenchmarkCreatorTest",
+ srcs = ["BenchmarkCreatorTest.java"],
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-worker",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
+
+java_test(
+ name = "RuntimeWorkerInstrumentTest",
+ srcs = ["RuntimeWorkerInstrumentTest.java"],
+ deps = [
+ "//caliper-util",
+ "//caliper-worker",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper/BUILD.bazel b/caliper/BUILD.bazel
new file mode 100644
index 00000000..26dff0dd
--- /dev/null
+++ b/caliper/BUILD.bazel
@@ -0,0 +1,39 @@
+java_library(
+ name = "caliper-lib",
+ srcs = glob(["src/main/java/**/*.java"]),
+ visibility = ["//:__subpackages__"],
+ deps = [
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "//caliper-worker-jvm",
+ "@maven//com/google/code/findbugs:jsr305",
+ "@maven//com/google/code/java-allocation-instrumenter",
+ "@maven//com/google/dagger",
+ "@maven//com/google/guava",
+ "@maven//com/sun/jersey:jersey-client",
+ ],
+ resources = glob(["src/main/resources/**"]),
+)
+
+java_binary(
+ name = "caliper-bin",
+ main_class = "com.google.caliper.runner.CaliperMain",
+ runtime_deps = [":caliper-lib"],
+ deploy_manifest_lines = [
+ "Premain-Class: com.google.monitoring.runtime.instrumentation.AllocationInstrumenter",
+ "Can-Redefine-Classes: true",
+ "Can-Retransform-Classes: true",
+ ]
+)
+
+genrule(
+ name = "caliper",
+ srcs = [
+ "//tools:java-exec-prefix",
+ "//caliper:caliper-bin_deploy.jar",
+ ],
+ outs = ["caliper"],
+ cmd_bash = "cat $(location //tools:java-exec-prefix) $(location //caliper:caliper-bin_deploy.jar) > $@",
+)
diff --git a/caliper/src/test/java/com/google/caliper/runner/BUILD.bazel b/caliper/src/test/java/com/google/caliper/runner/BUILD.bazel
new file mode 100644
index 00000000..d6043b4b
--- /dev/null
+++ b/caliper/src/test/java/com/google/caliper/runner/BUILD.bazel
@@ -0,0 +1,41 @@
+java_test(
+ name = "BadUserCodeTest",
+ srcs = ["BadUserCodeTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "//caliper/src/test/java/com/google/caliper/runner/testing",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
+
+java_test(
+ name = "CaliperMainTest",
+ srcs = ["CaliperMainTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
+
+java_test(
+ name = "MalformedBenchmarksTest",
+ srcs = ["MalformedBenchmarksTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
diff --git a/caliper/src/test/java/com/google/caliper/runner/config/BUILD.bazel b/caliper/src/test/java/com/google/caliper/runner/config/BUILD.bazel
new file mode 100644
index 00000000..6cb787c6
--- /dev/null
+++ b/caliper/src/test/java/com/google/caliper/runner/config/BUILD.bazel
@@ -0,0 +1,23 @@
+java_test(
+ name = "CaliperConfigModuleTest",
+ srcs = ["CaliperConfigModuleTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-runner",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ "@maven//org/mockito:mockito-all",
+ ],
+)
+
+java_test(
+ name = "CaliperConfigTest",
+ srcs = ["CaliperConfigTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-runner",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper/src/test/java/com/google/caliper/runner/instrument/BUILD.bazel b/caliper/src/test/java/com/google/caliper/runner/instrument/BUILD.bazel
new file mode 100644
index 00000000..3b713c00
--- /dev/null
+++ b/caliper/src/test/java/com/google/caliper/runner/instrument/BUILD.bazel
@@ -0,0 +1,39 @@
+java_test(
+ name = "AllocationInstrumentTest",
+ srcs = ["AllocationInstrumentTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-runner",
+ "//caliper/src/test/java/com/google/caliper/runner/testing",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
+
+java_test(
+ name = "ArbitraryMeasurmentInstrumentTest",
+ srcs = ["ArbitraryMeasurmentInstrumentTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper/src/test/java/com/google/caliper/runner/testing",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
+
+java_test(
+ name = "RuntimeInstrumentTest",
+ srcs = ["RuntimeInstrumentTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "//caliper/src/test/java/com/google/caliper/runner/testing",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper/src/test/java/com/google/caliper/runner/testing/BUILD.bazel b/caliper/src/test/java/com/google/caliper/runner/testing/BUILD.bazel
new file mode 100644
index 00000000..4caabd8f
--- /dev/null
+++ b/caliper/src/test/java/com/google/caliper/runner/testing/BUILD.bazel
@@ -0,0 +1,17 @@
+java_library(
+ name = "testing",
+ testonly = True,
+ srcs = glob(["*.java"]),
+ visibility = ["//caliper/src/test/java:__subpackages__"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-api",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "@maven//com/google/code/findbugs:jsr305",
+ "@maven//com/google/dagger",
+ "@maven//com/google/guava",
+ "@maven//junit",
+ ],
+)
diff --git a/caliper/src/test/java/com/google/caliper/runner/worker/BUILD.bazel b/caliper/src/test/java/com/google/caliper/runner/worker/BUILD.bazel
new file mode 100644
index 00000000..4485bf7b
--- /dev/null
+++ b/caliper/src/test/java/com/google/caliper/runner/worker/BUILD.bazel
@@ -0,0 +1,13 @@
+java_test(
+ name = "WorkerTest",
+ srcs = ["WorkerTest.java"],
+ deps = [
+ "//caliper:caliper-lib",
+ "//caliper-core",
+ "//caliper-runner",
+ "//caliper-util",
+ "//caliper/src/test/java/com/google/caliper/runner/testing",
+ "@maven//com/google/truth",
+ "@maven//junit",
+ ],
+)
diff --git a/maven_artifacts.bzl b/maven_artifacts.bzl
new file mode 100644
index 00000000..cf750842
--- /dev/null
+++ b/maven_artifacts.bzl
@@ -0,0 +1,120 @@
+load("//tools:utils.bzl", "index_artifacts")
+
+_DAGGER_SNIPPET = """
+java_library(
+ name = "dagger",
+ exports = [
+ ":dagger-api",
+ "@maven//javax/inject:javax_inject",
+ ],
+ exported_plugins = [":plugin"],
+ visibility = ["//visibility:public"],
+)
+
+raw_jvm_import(
+ name = "dagger-api",
+ jar = "@com_google_dagger_dagger//maven",
+ visibility = ["//visibility:public"],
+ deps = [
+ "@maven//javax/inject:javax_inject",
+ ],
+)
+
+java_plugin(
+ name = "plugin",
+ processor_class = "dagger.internal.codegen.ComponentProcessor",
+ generates_api = True,
+ deps = [":dagger-compiler"],
+)
+"""
+
+_AUTO_VALUE_SNIPPET = """
+java_library(
+ name = "value",
+ exports = [
+ ":auto-value-annotations",
+ ],
+ exported_plugins = [":plugin"],
+ visibility = ["//visibility:public"],
+)
+
+raw_jvm_import(
+ name = "auto-value",
+ jar = "@com_google_auto_value_auto_value//maven",
+ visibility = ["@maven//com/ryanharter/auto/value:__subpackages__"],
+)
+
+java_plugin(
+ name = "plugin",
+ processor_class = "com.google.auto.value.processor.AutoValueProcessor",
+ generates_api = True,
+ deps = [
+ ":auto-value",
+ "@maven//com/google/auto:auto-common",
+ ],
+)
+"""
+
+_JSR305_SNIPPET = """
+raw_jvm_import(
+ name = "jsr305",
+ jar = "@com_google_code_findbugs_jsr305//maven",
+ visibility = ["//visibility:public"],
+ neverlink = True,
+)
+"""
+
+MAVEN_ARTIFACTS = {
+ "com.google.auto:auto-common:0.11": {"insecure": True},
+ "com.google.auto.value:auto-value-annotations:1.6.3": {"insecure": True},
+ "com.google.auto.value:auto-value:1.6.3": {"insecure": True, "build_snippet": _AUTO_VALUE_SNIPPET},
+ "com.google.code.findbugs:jsr305:1.3.9": {"insecure": True, "build_snippet": _JSR305_SNIPPET},
+ "com.google.code.gson:gson:2.8.6": {"insecure": True},
+ "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter:3.3.0": {"insecure": True},
+ "com.google.dagger:dagger:2.29.1": {"insecure": True, "build_snippet": _DAGGER_SNIPPET},
+ "com.google.dagger:dagger-compiler:2.29.1": {"insecure": True},
+ "com.google.dagger:dagger-producers:2.29.1": {"insecure": True},
+ "com.google.dagger:dagger-spi:2.29.1": {"insecure": True},
+ "com.google.errorprone:error_prone_annotations:2.3.2": {"insecure": True},
+ "com.google.errorprone:javac-shaded:9-dev-r4023-3": {"insecure": True},
+ "com.google.guava:guava:29.0-jre": {"insecure": True},
+ "com.google.guava:failureaccess:1.0.1": {"insecure": True},
+ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava": {"insecure": True},
+ "com.google.googlejavaformat:google-java-format:1.5": {"insecure": True},
+ "com.google.j2objc:j2objc-annotations:1.3": {"insecure": True},
+ "com.google.truth:truth:1.0": {"insecure": True},
+ "com.googlecode.java-diff-utils:diffutils:1.3.0": {"insecure": True},
+ "com.squareup:javapoet:1.11.1": {"insecure": True},
+ "com.squareup.okhttp:okhttp:2.5.0": {"insecure": True},
+ "com.squareup.okio:okio:1.6.0": {"insecure": True},
+ "com.sun.jersey:jersey-client:1.11": {"insecure": True},
+ "com.sun.jersey:jersey-core:1.11": {"insecure": True},
+ "javax.annotation:javax.annotation-api:1.3.2": {"insecure": True},
+ "javax.annotation:jsr250-api:1.0": {"insecure": True},
+ "javax.inject:javax.inject:1": {"insecure": True},
+ "joda-time:joda-time:2.10.6": {"insecure": True},
+ "junit:junit:4.13": {"insecure": True},
+ "net.ltgt.gradle.incap:incap:0.2": {"insecure": True},
+ "org.checkerframework:checker-compat-qual:2.5.5": {"insecure": True},
+ "org.checkerframework:checker-qual:2.8.1": {"insecure": True},
+ "org.codehaus.mojo:animal-sniffer-annotations:1.18": {"insecure": True},
+ "org.hamcrest:hamcrest-core:1.3": {"insecure": True},
+ "org.jetbrains:annotations:13.0": {"insecure": True},
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0": {"insecure": True},
+ "org.jetbrains.kotlin:kotlin-stdlib:1.3.72": {"insecure": True},
+ "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72": {"insecure": True},
+ "org.mockito:mockito-all:1.9.5": {"insecure": True},
+ "org.ow2.asm:asm-analysis:7.2": {"insecure": True},
+ "org.ow2.asm:asm-commons:7.2": {"insecure": True},
+ "org.ow2.asm:asm-tree:7.2": {"insecure": True},
+ "org.ow2.asm:asm-util:7.2": {"insecure": True},
+ "org.ow2.asm:asm:7.2": {"insecure": True},
+ "org.pantsbuild:jarjar:1.7.2": {
+ "insecure": True,
+ "exclude": ["org.apache.ant:ant", "org.apache.maven:maven-plugin-api"],
+ },
+}
+
+
+
+ARTIFACT_VERSIONS = index_artifacts(MAVEN_ARTIFACTS)
diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel
new file mode 100644
index 00000000..c7e197c1
--- /dev/null
+++ b/tools/BUILD.bazel
@@ -0,0 +1,8 @@
+exports_files(["java-exec-prefix"])
+
+java_binary(
+ name = "jarjar_runner",
+ main_class = "org.pantsbuild.jarjar.Main",
+ visibility = ["//:__subpackages__"],
+ runtime_deps = ["@maven//org/pantsbuild:jarjar"],
+)
diff --git a/tools/jarjar.bzl b/tools/jarjar.bzl
new file mode 100644
index 00000000..4cc93ce8
--- /dev/null
+++ b/tools/jarjar.bzl
@@ -0,0 +1,46 @@
+def jarjar_action(actions, label, rules, input, output, jarjar):
+ actions.run(
+ inputs = [rules, input],
+ outputs = [output],
+ executable = jarjar,
+ progress_message = "jarjar %s" % label,
+ arguments = ["process", rules.path, input.path, output.path],
+ )
+ return output
+
+def _jar_jar_impl(ctx):
+ jar = jarjar_action(
+ actions = ctx.actions,
+ label = ctx.label,
+ rules = ctx.file.rules,
+ input = ctx.file.input_jar,
+ output = ctx.outputs.jar,
+ jarjar = ctx.executable.jarjar_runner,
+ )
+ return [
+ DefaultInfo(
+ files = depset([jar]),
+ runfiles = ctx.runfiles(files = [jar]),
+ ),
+ JavaInfo(
+ output_jar = jar,
+ compile_jar = jar,
+ ),
+ ]
+
+jar_jar = rule(
+ implementation = _jar_jar_impl,
+ attrs = {
+ "input_jar": attr.label(allow_single_file = True),
+ "rules": attr.label(allow_single_file = True),
+ "jarjar_runner": attr.label(
+ executable = True,
+ cfg = "host",
+ default = Label("@bazel_tools//third_party/jarjar:jarjar_bin"),
+ ),
+ },
+ outputs = {
+ "jar": "%{name}.jar",
+ },
+ provides = [JavaInfo],
+)
diff --git a/tools/java-exec-prefix b/tools/java-exec-prefix
new file mode 100644
index 00000000..8efda6db
--- /dev/null
+++ b/tools/java-exec-prefix
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright (c) 2015 Google, Inc.
+#
+# 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.
+
+MYSELF=$(which "$0" 2>/dev/null)
+[ $? -gt 0 ] && [ -f "$0" ] && MYSELF="./$0"
+JAVA_CMD=java
+[ -n "$JAVA_HOME" ] && JAVA_CMD="$JAVA_HOME/bin/java"
+exec "$JAVA_CMD" $JAVA_ARGS -jar "$MYSELF" "$@"
+exit 1
diff --git a/tools/utils.bzl b/tools/utils.bzl
new file mode 100644
index 00000000..74c68f56
--- /dev/null
+++ b/tools/utils.bzl
@@ -0,0 +1,6 @@
+def index_artifacts(artifacts):
+ artifactMap = {}
+ for artifact in artifacts:
+ (group_id, artifact_id, version) = artifact.split(":")
+ artifactMap["%s:%s" % (group_id, artifact_id)] = version
+ return artifactMap