diff --git a/gitiles-servlet/BUILD b/gitiles-servlet/BUILD
new file mode 100644
index 0000000..ff33933
--- /dev/null
+++ b/gitiles-servlet/BUILD
@@ -0,0 +1,84 @@
+java_library(
+    name = "servlet-api",
+    neverlink = 1,
+    exports = ["//lib:servlet-api_2_5"],
+)
+
+java_library(
+    name = "servlet",
+    srcs = glob(["src/main/java/**/*.java"]),
+    resources = glob(["src/main/resources/**/*"]),
+    visibility = ["//visibility:public"],
+    deps = [
+        ":servlet-api",
+        "//blame-cache:lib",
+        "//lib:autolink",
+        "//lib:cm-autolink",
+        "//lib:commonmark",
+        "//lib:commons-lang",
+        "//lib:gfm-strikethrough",
+        "//lib:gfm-tables",
+        "//lib:gson",
+        "//lib:guava",
+        "//lib:joda-time",
+        "//lib:jsr305",
+        "//lib:prettify",
+        "//lib/guice",
+        "//lib/jgit",
+        "//lib/jgit:jgit-archive",
+        "//lib/jgit:jgit-servlet",
+        "//lib/slf4j:slf4j-api",
+        "//lib/soy",
+    ],
+)
+
+java_library(
+    name = "testutil",
+    srcs = glob(
+        ["src/test/java/**/*.java"],
+        exclude = ["src/test/java/**/*Test.java"],
+    ) + glob(["**/ServletTest.java"]),
+    deps = [
+        ":servlet",
+        "//lib:gson",
+        "//lib:guava",
+        "//lib:servlet-api_2_5",
+        "//lib:truth",
+        "//lib/jgit",
+        "//lib/jgit:jgit-servlet",
+        "//lib/jgit:junit",
+        "//lib/junit",
+    ],
+)
+
+load("//gitiles-servlet:junit.bzl", "junit_tests")
+
+junit_tests(
+    name = "ServletTests",
+    srcs = glob(
+        [
+            "src/test/java/**/*Test.java",
+        ],
+        exclude = ["**/ServletTest.java"],
+    ),
+    runtime_deps = ["//lib/junit:hamcrest-core"],
+    deps = [
+        ":servlet",
+        ":testutil",
+        "//lib:autolink",
+        "//lib:cm-autolink",
+        "//lib:commonmark",
+        "//lib:gfm-strikethrough",
+        "//lib:gfm-tables",
+        "//lib:gson",
+        "//lib:guava",
+        "//lib:joda-time",
+        "//lib:servlet-api_2_5",
+        "//lib:truth",
+        "//lib/jgit",
+        "//lib/jgit:jgit-servlet",
+        "//lib/jgit:junit",
+        "//lib/junit",
+        "//lib/soy",
+    ],
+)
diff --git a/gitiles-servlet/junit.bzl b/gitiles-servlet/junit.bzl
new file mode 100644
index 0000000..ee79637
--- /dev/null
+++ b/gitiles-servlet/junit.bzl
@@ -0,0 +1,60 @@
+# skylark rule to generate a Junit4 TestSuite
+# Assumes srcs are all .java Test files
+# Assumes junit4 is already added to deps by the user.
+
+# See https://github.com/bazelbuild/bazel/issues/1017 for background.
+
+_OUTPUT = """import org.junit.runners.Suite;
+import org.junit.runner.RunWith;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses({%s})
+public class %s {}
+"""
+
+_PREFIXES = ("org", "com", "edu")
+
+def _SafeIndex(l, val):
+    for i, v in enumerate(l):
+        if val == v:
+            return i
+    return -1
+
+def _AsClassName(fname):
+    fname = [x.path for x in fname.files][0]
+    toks = fname[:-5].split("/")
+    findex = -1
+    for s in _PREFIXES:
+        findex = _SafeIndex(toks, s)
+        if findex != -1:
+            break
+    if findex == -1:
+        fail("%s does not contain any of %s",
+                         fname, _PREFIXES)
+    return ".".join(toks[findex:]) + ".class"
+
+def _impl(ctx):
+    classes = ",".join(
+        [_AsClassName(x) for x in ctx.attr.srcs])
+    ctx.file_action(output=ctx.outputs.out, content=_OUTPUT % (
+            classes, ctx.attr.outname))
+
+_GenSuite = rule(
+    attrs = {
+        "srcs": attr.label_list(allow_files = True),
+        "outname": attr.string(),
+    },
+    outputs = {"out": "%{name}.java"},
+    implementation = _impl,
+)
+
+def junit_tests(name, srcs, **kwargs):
+    s_name = name + "TestSuite"
+    j_name = s_name + ".java",
+    _GenSuite(name=s_name,
+              srcs=srcs,
+              outname=s_name)
+    native.java_test(name=name,
+                     test_class=s_name,
+                     srcs = srcs + [":"+s_name],
+                     **kwargs)
