diff options
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" |