aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java2
-rwxr-xr-xsrc/test/shell/bazel/bazel_java_test.sh59
4 files changed, 82 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
index e14fc2c6fc..7a58f46c6e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
@@ -44,6 +44,7 @@ public final class JavaLibraryHelper {
private Artifact output;
private final List<Artifact> sourceJars = new ArrayList<>();
private final List<Artifact> sourceFiles = new ArrayList<>();
+ private final List<Artifact> resources = new ArrayList<>();
/**
* Contains all the dependencies; these are treated as both compile-time and runtime dependencies.
@@ -85,6 +86,11 @@ public final class JavaLibraryHelper {
return this.addSourceJars(Arrays.asList(sourceJars));
}
+ public JavaLibraryHelper addResources(Iterable<Artifact> resources) {
+ Iterables.addAll(this.resources, resources);
+ return this;
+ }
+
public JavaLibraryHelper addDep(JavaCompilationArgsProvider provider) {
checkNotNull(provider);
this.deps.add(provider);
@@ -152,6 +158,11 @@ public final class JavaLibraryHelper {
attributes.setTargetLabel(ruleContext.getLabel());
attributes.setSourcePath(sourcePathEntries);
+ for (Artifact resource : resources) {
+ attributes.addResource(
+ JavaHelper.getJavaResourcePath(semantics, ruleContext, resource), resource);
+ }
+
if (isStrict() && classpathMode != JavaClasspathMode.OFF) {
JavaCompilationHelper.addDependencyArtifactsToAttributes(
attributes, deps);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
index 86267d4e95..4f975a1c76 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
@@ -177,6 +177,14 @@ public class JavaSkylarkCommon {
type = SkylarkList.class,
generic1 = Artifact.class,
defaultValue = "[]"
+ ),
+ @Param(
+ name = "resources",
+ positional = false,
+ named = true,
+ type = SkylarkList.class,
+ generic1 = Artifact.class,
+ defaultValue = "[]"
)
}
)
@@ -190,13 +198,15 @@ public class JavaSkylarkCommon {
String strictDepsMode,
ConfiguredTarget javaToolchain,
ConfiguredTarget hostJavabase,
- SkylarkList<Artifact> sourcepathEntries) throws EvalException {
+ SkylarkList<Artifact> sourcepathEntries,
+ SkylarkList<Artifact> resources) throws EvalException {
JavaLibraryHelper helper =
new JavaLibraryHelper(skylarkRuleContext.getRuleContext())
.setOutput(outputJar)
.addSourceJars(sourceJars)
.addSourceFiles(sourceFiles)
+ .addResources(resources)
.setSourcePathEntries(sourcepathEntries)
.setJavacOpts(javacOpts);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java
index a549af3665..a4e707e067 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java
@@ -93,7 +93,7 @@ public class ResourceJarActionBuilder {
.setJarExecutable(
ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(),
singleJar,
- JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions())
+ javaToolchain.getJvmOptions())
.addTransitiveInputs(javabase);
} else {
builder.setExecutable(singleJar);
diff --git a/src/test/shell/bazel/bazel_java_test.sh b/src/test/shell/bazel/bazel_java_test.sh
index 9dc1be797c..83d967640e 100755
--- a/src/test/shell/bazel/bazel_java_test.sh
+++ b/src/test/shell/bazel/bazel_java_test.sh
@@ -76,6 +76,7 @@ def _impl(ctx):
output = output_jar,
javac_opts = java_common.default_javac_opts(ctx, java_toolchain_attr = "_java_toolchain"),
deps = deps,
+ resources = ctx.files.resources,
strict_deps = "ERROR",
java_toolchain = ctx.attr._java_toolchain,
host_javabase = ctx.attr._host_javabase
@@ -91,6 +92,7 @@ java_custom_library = rule(
attrs = {
"srcs": attr.label_list(allow_files=True),
"deps": attr.label_list(),
+ "resources": attr.label_list(allow_files=True),
"_java_toolchain": attr.label(default = Label("@bazel_tools//tools/jdk:toolchain")),
"_host_javabase": attr.label(default = Label("//tools/defaults:jdk"))
},
@@ -735,5 +737,62 @@ EOF
expect_log "testTest was run"
}
+function test_java_sandwich_resources_file() {
+ mkdir -p java/com/google/sandwich
+ workspace_dir="$PWD"
+ cd java/com/google/sandwich
+
+ touch BUILD A.java java_custom_library.bzl my_precious_resource.txt
+
+ cat > BUILD << EOF
+load(':java_custom_library.bzl', 'java_custom_library')
+java_custom_library(
+ name = "custom",
+ srcs = ["A.java"],
+ resources = ["my_precious_resource.txt"]
+)
+EOF
+ cat > A.java << EOF
+package com.google.sandwich;
+class A { }
+EOF
+ write_java_custom_rule
+ cd "${workspace_dir}"
+ bazel build java/com/google/sandwich:custom > "$TEST_log" || fail "Java sandwich build failed"
+ unzip -l bazel-bin/java/com/google/sandwich/libcustom.jar > "$TEST_log"
+ expect_log "my_precious_resource.txt"
+}
+
+function test_java_sandwich_resources_filegroup() {
+ mkdir -p java/com/google/sandwich
+ workspace_dir="$PWD"
+ cd java/com/google/sandwich
+
+ touch BUILD A.java java_custom_library.bzl my_precious_resource.txt my_other_precious_resource.txt
+
+ cat > BUILD << EOF
+load(':java_custom_library.bzl', 'java_custom_library')
+filegroup(
+ name = "resources_group",
+ srcs = ["my_precious_resource.txt", "my_other_precious_resource.txt"]
+)
+java_custom_library(
+ name = "custom",
+ srcs = ["A.java"],
+ resources = [":resources_group"]
+)
+EOF
+ cat > A.java << EOF
+package com.google.sandwich;
+class A { }
+EOF
+ write_java_custom_rule
+ cd "${workspace_dir}"
+ bazel build java/com/google/sandwich:custom > "$TEST_log" || fail "Java sandwich build failed"
+ unzip -l bazel-bin/java/com/google/sandwich/libcustom.jar > "$TEST_log"
+ expect_log "my_precious_resource.txt"
+ expect_log "my_other_precious_resource.txt"
+}
+
run_suite "Java integration tests"