aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar ajmichael <ajmichael@google.com>2017-11-14 10:20:45 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-14 10:22:58 -0800
commit431b6436373c9feb5d03e488ff72f822bbe55b2d (patch)
treea433709dba855e2f32696309c798246462f8086a
parentc47c13fd0c489232c8d1d801cbcbd35efb251cbf (diff)
Add deps attributes to the Skylark maven_{a,j}ar rules.
The deps are passed through into the generated java_import and aar_import rules. This is necessary for AARs with resource dependencies since maven_aar ignores transitive dependencies. It's less significant for the Java rules, since typically JARs on Maven are compiled class files and as such only have runtime dependencies. Example usage: ``` # WORKSPACE load("@bazel_tools//tools/build_defs/repo:maven_rules.bzl", "maven_aar") maven_aar( name = "android_image_cropper", artifact = "com.theartofdev.edmodo:android-image-cropper:2.3.1", deps = [ "@androidsdk//com.android.support:appcompat-v7-24.1.1", ], ) ``` Fixes https://github.com/bazelbuild/bazel/issues/2863. Fixes https://github.com/bazelbuild/bazel/issues/3980. Also, cleans up some broken stuff in the tests (sadly, they don't run on jenkins, so nothing caught that they were broken). test_maven_jar_with_classifier_skylark still does not work, so I disabled. RELNOTES: Add deps attribute to Skylark maven_aar and maven_jar workspace rules. PiperOrigin-RevId: 175698282
-rw-r--r--src/test/shell/bazel/BUILD1
-rwxr-xr-xsrc/test/shell/bazel/maven_skylark_test.sh20
-rwxr-xr-xsrc/test/shell/bazel/remote_helpers.sh8
-rw-r--r--tools/build_defs/repo/maven_rules.bzl17
4 files changed, 36 insertions, 10 deletions
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index 0e0e821410..7fedb81fc4 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -347,7 +347,6 @@ sh_test(
srcs = ["maven_skylark_test.sh"],
data = [
":test-deps",
- "//external:android_ndk_for_testing",
"//external:android_sdk_for_testing",
"@m2//:files",
],
diff --git a/src/test/shell/bazel/maven_skylark_test.sh b/src/test/shell/bazel/maven_skylark_test.sh
index 9e5544746c..227192b559 100755
--- a/src/test/shell/bazel/maven_skylark_test.sh
+++ b/src/test/shell/bazel/maven_skylark_test.sh
@@ -102,11 +102,11 @@ EOF
expect_log "Tra-la!"
}
-function test_maven_jar_with_classifier_skylark() {
+function DISABLEDtest_maven_jar_with_classifier_skylark() {
setup_zoo
version="1.21"
- packaging = "jar"
- classifier = "sources"
+ packaging="jar"
+ classifier="sources"
serve_artifact com.example.carnivore carnivore $version $packaging $classifier
setup_local_maven_settings_xml "http://localhost:$fileserver_port"
@@ -150,8 +150,8 @@ EOF
function test_maven_aar_skylark() {
setup_android_sdk_support
- if [ -z "$ANDROID_NDK_API_LEVEL" ] || [ -z "$ANDROID_SDK_API_LEVEL" ]; then
- fail "This test cannot run without Android repositories set up," \
+ if [[ ! -d "${TEST_SRCDIR}/androidsdk" ]]; then
+ fail "This test cannot run without android_sdk_repository set up," \
"see the WORKSPACE file for instructions"
fi
setup_android_binary
@@ -164,6 +164,13 @@ maven_aar(
artifact = "com.example.carnivore:herbivore:1.21",
sha1 = "$sha1",
settings = "//:$local_maven_settings_xml",
+ deps = ["@herbivore2//aar"],
+)
+maven_aar(
+ name = "herbivore2",
+ artifact = "com.example.carnivore:herbivore:1.21",
+ sha1 = "$sha1",
+ settings = "//:$local_maven_settings_xml",
)
EOF
bazel build //java/com/app || fail "Expected build to succeed"
@@ -171,6 +178,9 @@ EOF
expect_log_once "res/layout/my_view.xml"
unzip -l bazel-bin/java/com/app/app_deploy.jar > $TEST_log
expect_log_once "com/herbivore/Stegosaurus.class"
+ bazel query 'deps(//java/com/app)' >& $TEST_log
+ expect_log "@herbivore//aar:aar"
+ expect_log "@herbivore2//aar:aar"
}
# Same as test_maven_jar, except omit sha1 implying "we don't care".
diff --git a/src/test/shell/bazel/remote_helpers.sh b/src/test/shell/bazel/remote_helpers.sh
index 6a5a87736f..efdb5a392c 100755
--- a/src/test/shell/bazel/remote_helpers.sh
+++ b/src/test/shell/bazel/remote_helpers.sh
@@ -177,9 +177,13 @@ function create_artifact() {
maven_path=$PWD/$(echo $group_id | sed 's/\./\//g')/$artifact_id/$version
mkdir -p $maven_path
openssl sha1 $artifact > $maven_path/$artifact_id-$version.$packaging.sha1
- openssl sha1 $srcjar_artifact > $maven_path/$artifact_id-$version-sources.$packaging.sha1
mv $artifact $maven_path/$artifact_id-$version.$packaging
- mv $srcjar_artifact $maven_path/$artifact_id-$version-sources.$packaging
+
+ # srcjar_artifact is not created for AARs.
+ if [ ! -z "${srcjar_artifact+x}" ]; then
+ openssl sha1 $srcjar_artifact > $maven_path/$artifact_id-$version-sources.$packaging.sha1
+ mv $srcjar_artifact $maven_path/$artifact_id-$version-sources.$packaging
+ fi
}
function serve_artifact() {
diff --git a/tools/build_defs/repo/maven_rules.bzl b/tools/build_defs/repo/maven_rules.bzl
index 9a15166df2..a27431cf97 100644
--- a/tools/build_defs/repo/maven_rules.bzl
+++ b/tools/build_defs/repo/maven_rules.bzl
@@ -146,6 +146,9 @@ _maven_jar_build_file_template = """
java_import(
name = 'jar',
jars = ['{artifact_filename}'],
+ deps = [
+{deps_string}
+ ],
visibility = ['//visibility:public']
)
@@ -161,6 +164,9 @@ _maven_aar_build_file_template = """
aar_import(
name = 'aar',
aar = '{artifact_filename}',
+ deps = [
+{deps_string}
+ ],
visibility = ['//visibility:public'],
)
@@ -172,8 +178,11 @@ filegroup(
# Provides the syntax "@jar_name//jar" for dependencies
def _generate_build_file(ctx, template, paths):
+ deps_string = "\n".join(["'%s'," % dep for dep in ctx.attr.deps])
contents = template.format(
- rule_name = ctx.name, artifact_filename = paths.artifact_filename)
+ rule_name = ctx.name,
+ artifact_filename = paths.artifact_filename,
+ deps_string = deps_string)
ctx.file('%s/BUILD' % paths.symlink_dir, contents, False)
@@ -268,7 +277,11 @@ _common_maven_rule_attrs = {
mandatory = True,
),
"sha1": attr.string(default = ""),
- "settings": attr.label(default = None)
+ "settings": attr.label(default = None),
+ # Allow the user to specify deps for the generated java_import or aar_import
+ # since maven_jar and maven_aar do not automatically pull in transitive
+ # dependencies.
+ "deps": attr.label_list(),
}
def _maven_jar_impl(ctx):