public void apply()

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);
            });
  }