in buildSrc/src/main/java/com/google/firebase/gradle/plugins/publish/PublishingPlugin.java [76:221]
public void apply(Project project) {
String projectNamesToPublish = getPropertyOr(project, "projectsToPublish", "");
String projectsToPublishSeparator = getPropertyOr(project, "projectsToPublishSeparator", ",");
Mode publishMode = Enum.valueOf(Mode.class, getPropertyOr(project, "publishMode", "SNAPSHOT"));
Task publishAllToLocal = project.task("publishAllToLocal");
Task publishAllToBuildDir = project.task("publishAllToBuildDir");
Task firebasePublish = project.task("firebasePublish");
project
.getGradle()
.projectsEvaluated(
gradle -> {
Set<FirebaseLibraryExtension> projectsToPublish =
Arrays.stream(projectNamesToPublish.split(projectsToPublishSeparator, -1))
.filter(name -> !name.isEmpty())
.map(
name ->
project
.project(name)
.getExtensions()
.getByType(FirebaseLibraryExtension.class))
.flatMap(lib -> lib.getLibrariesToRelease().stream())
.collect(Collectors.toSet());
project
.getExtensions()
.getExtraProperties()
.set("projectsToPublish", projectsToPublish);
Publisher publisher = new Publisher(publishMode, projectsToPublish);
project.subprojects(
sub -> {
FirebaseLibraryExtension firebaseLibrary =
sub.getExtensions().findByType(FirebaseLibraryExtension.class);
if (firebaseLibrary == null) {
return;
}
sub.apply(ImmutableMap.of("plugin", AndroidMavenPublishPlugin.class));
PublishingExtension publishing =
sub.getExtensions().getByType(PublishingExtension.class);
publishing.repositories(
repos ->
repos.maven(
repo -> {
repo.setUrl(
URI.create(
"file://"
+ sub.getRootProject().getBuildDir()
+ "/m2repository"));
repo.setName("BuildDir");
}));
publishing.publications(
publications ->
publications.create(
"mavenAar",
MavenPublication.class,
publication -> {
publication.from(
sub.getComponents()
.findByName(firebaseLibrary.type.getComponentName()));
publication.setArtifactId(firebaseLibrary.artifactId.get());
publication.setGroupId(firebaseLibrary.groupId.get());
if (firebaseLibrary.publishSources) {
publication.artifact(
sub.getTasks()
.create(
"sourceJar",
Jar.class,
jar -> {
jar.from(firebaseLibrary.getSrcDirs());
jar.getArchiveClassifier().set("sources");
}));
}
firebaseLibrary.applyPomCustomization(publication.getPom());
publisher.decorate(firebaseLibrary, publication);
}));
publishAllToLocal.dependsOn(
sub.getPath() + ":publishMavenAarPublicationToMavenLocal");
publishAllToBuildDir.dependsOn(
sub.getPath() + ":publishMavenAarPublicationToBuildDirRepository");
});
project
.getTasks()
.create(
"publishProjectsToMavenLocal",
t -> {
for (FirebaseLibraryExtension toPublish : projectsToPublish) {
t.dependsOn(getPublishTask(toPublish, "MavenLocal"));
}
});
Task publishProjectsToBuildDir =
project
.getTasks()
.create(
"publishProjectsToBuildDir",
t -> {
for (FirebaseLibraryExtension toPublish : projectsToPublish) {
t.dependsOn(getPublishTask(toPublish, "BuildDirRepository"));
t.dependsOn(toPublish.getPath() + ":kotlindoc");
}
});
Zip buildMavenZip =
project
.getTasks()
.create(
"buildMavenZip",
Zip.class,
zip -> {
zip.dependsOn(publishProjectsToBuildDir);
zip.getArchiveFileName().set("m2repository.zip");
zip.getDestinationDirectory().set(project.getBuildDir());
zip.from(project.getBuildDir() + "/m2repository");
});
Zip buildKotlindocZip =
project
.getTasks()
.create(
"buildKotlindocZip",
Zip.class,
zip -> {
zip.dependsOn(publishProjectsToBuildDir);
zip.getArchiveFileName().set("kotlindoc.zip");
zip.getDestinationDirectory().set(project.getBuildDir());
zip.from(project.getBuildDir() + "/firebase-kotlindoc");
});
Task info =
project
.getTasks()
.create(
"publishPrintInfo",
t ->
publishAllToLocal.doLast(
it ->
project
.getLogger()
.lifecycle(
"Publishing the following libraries:\n{}",
projectsToPublish.stream()
.map(FirebaseLibraryExtension::getPath)
.collect(Collectors.joining("\n")))));
buildMavenZip.mustRunAfter(info);
buildKotlindocZip.mustRunAfter(info);
firebasePublish.dependsOn(info, buildMavenZip, buildKotlindocZip);
});
}