diff options
Diffstat (limited to 'src')
2 files changed, 51 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java index 14b05372df..8b3c32b42d 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Maps.EntryTransformer; import com.google.devtools.build.lib.analysis.BlazeDirectories; @@ -62,6 +63,11 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { private static final Revision MIN_BUILD_TOOLS_REVISION = new Revision(24, 0, 3); private static final String PATH_ENV_VAR = "ANDROID_HOME"; private static final ImmutableList<String> PATH_ENV_VAR_AS_LIST = ImmutableList.of(PATH_ENV_VAR); + private static final ImmutableList<String> LOCAL_MAVEN_REPOSITORIES = + ImmutableList.of( + "extras/android/m2repository", + "extras/google/m2repository", + "extras/m2repository"); @Override public boolean isLocal(Rule rule) { @@ -79,7 +85,7 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { } @Override - public RepositoryDirectoryValue.Builder fetch(Rule rule, Path outputDirectory, + public RepositoryDirectoryValue.Builder fetch(Rule rule, final Path outputDirectory, BlazeDirectories directories, Environment env, Map<String, String> markerData) throws SkyFunctionException, InterruptedException { Map<String, String> environ = @@ -221,9 +227,15 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { // All local maven repositories that are shipped in the Android SDK. // TODO(ajmichael): Create SkyKeys so that if the SDK changes, this function will get rerun. - Iterable<Path> localMavenRepositories = ImmutableList.of( - outputDirectory.getRelative("extras/android/m2repository"), - outputDirectory.getRelative("extras/google/m2repository")); + Iterable<Path> localMavenRepositories = + Lists.transform( + LOCAL_MAVEN_REPOSITORIES, + new Function<String, Path>() { + @Override + public Path apply(String pathFragment) { + return outputDirectory.getRelative(pathFragment); + } + }); try { SdkMavenRepository sdkExtrasRepository = SdkMavenRepository.create(Iterables.filter(localMavenRepositories, new Predicate<Path>() { diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java index 47554ecdca..7f90e4297a 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java @@ -60,10 +60,12 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase { } private void scratchExtrasLibrary( - String groupId, String artifactId, String version, String packaging) throws Exception { + String mavenRepoPath, String groupId, String artifactId, String version, String packaging) + throws Exception { scratch.file( String.format( - "/sdk/extras/google/m2repository/%s/%s/%s/%s.pom", + "/sdk/%s/%s/%s/%s/%s.pom", + mavenRepoPath, groupId.replace(".", "/"), artifactId, version, @@ -80,7 +82,7 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase { public void testGeneratedAarImport() throws Exception { scratchPlatformsDirectories(25); scratchBuildToolsDirectories("25.0.0"); - scratchExtrasLibrary("com.google.android", "foo", "1.0.0", "aar"); + scratchExtrasLibrary("extras/google/m2repository", "com.google.android", "foo", "1.0.0", "aar"); FileSystemUtils.appendIsoLatin1(scratch.resolve("WORKSPACE"), "local_repository(name = 'bazel_tools', path = '/bazel_tools_workspace')", "android_sdk_repository(", @@ -100,7 +102,7 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase { public void testExportsExtrasLibraryArtifacts() throws Exception { scratchPlatformsDirectories(25); scratchBuildToolsDirectories("25.0.0"); - scratchExtrasLibrary("com.google.android", "foo", "1.0.0", "aar"); + scratchExtrasLibrary("extras/google/m2repository", "com.google.android", "foo", "1.0.0", "aar"); FileSystemUtils.appendIsoLatin1(scratch.resolve("WORKSPACE"), "local_repository(name = 'bazel_tools', path = '/bazel_tools_workspace')", "android_sdk_repository(", @@ -115,6 +117,35 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase { } @Test + public void testKnownSdkMavenRepositories() throws Exception { + scratchPlatformsDirectories(25); + scratchBuildToolsDirectories("25.0.0"); + scratchExtrasLibrary("extras/google/m2repository", "com.google.android", "a", "1.0.0", "jar"); + scratchExtrasLibrary("extras/android/m2repository", "com.android.support", "b", "1.0.0", "aar"); + scratchExtrasLibrary("extras/m2repository", "com.android.support", "c", "1.0.1", "aar"); + FileSystemUtils.appendIsoLatin1(scratch.resolve("WORKSPACE"), + "local_repository(name = 'bazel_tools', path = '/bazel_tools_workspace')", + "android_sdk_repository(", + " name = 'androidsdk',", + " path = '/sdk',", + ")"); + invalidatePackages(); + + assertThat( + getConfiguredTarget( + "@androidsdk//:extras/google/m2repository/com/google/android/a/1.0.0/a.jar")) + .isNotNull(); + assertThat( + getConfiguredTarget( + "@androidsdk//:extras/android/m2repository/com/android/support/b/1.0.0/b.aar")) + .isNotNull(); + assertThat( + getConfiguredTarget( + "@androidsdk//:extras/m2repository/com/android/support/c/1.0.1/c.aar")) + .isNotNull(); + } + + @Test public void testSystemImageDirectoriesAreFound() throws Exception { scratchPlatformsDirectories(25); scratchBuildToolsDirectories("25.0.0"); |