All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.gesellix.gradle.debian.DebianPackagePlugin.groovy Maven / Gradle / Ivy

package de.gesellix.gradle.debian

import de.gesellix.gradle.debian.tasks.BuildDebianPackageTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.publish.maven.MavenPublication

import static de.gesellix.gradle.debian.DebianPackagePluginExtension.DEBPKGPLUGIN_EXTENSION_NAME
import static de.gesellix.gradle.debian.tasks.BuildDebianPackageTask.DEBPKGTASK_NAME
import static org.gradle.api.publish.maven.plugins.MavenPublishPlugin.PUBLISH_LOCAL_LIFECYCLE_TASK_NAME
import static org.gradle.language.base.plugins.LifecycleBasePlugin.ASSEMBLE_TASK_NAME

class DebianPackagePlugin implements Plugin {

  private PublicationFinder publicationFinder = new PublicationFinder()

  @Override
  void apply(Project project) {
    def extension = project.extensions.create(DEBPKGPLUGIN_EXTENSION_NAME, DebianPackagePluginExtension, project)
    extension.with {
      packagename = project.name
    }
    addTasks(project)
  }

  def addTasks(Project project) {
    project.afterEvaluate {
      project.tasks.withType(BuildDebianPackageTask).whenTaskAdded { task ->
        def extension = project.extensions.findByName(DEBPKGPLUGIN_EXTENSION_NAME)
        task.conventionMapping.with {
          changelogFile = { project.file(extension.changelogFile) }
          controlDirectory = { project.file(extension.controlDirectory) }
          packagename = { extension.packagename }
          publications = { extension.publications }
          data = { extension.data }
          outputFile = {
            extension.outputFile ? project.file(extension.outputFile) : new File("${project.buildDir}/${extension.packagename}-${project.version}.deb")
          }
        }

        if (extension.publications?.length) {
          def publicationsByProject = publicationFinder.findPublicationsInProject(project, extension.publications as String[])
          publicationsByProject.each { MavenPublicationsByProject mavenPublicationByProject ->
            mavenPublicationByProject.publications.each { MavenPublication publication ->
/*
              def taskName = "generatePomFileFor${capitalize(publication.name)}Publication"
              Task publicationTask = mavenPublicationByProject.project.tasks.findByName(taskName)
              if (publicationTask) {
                task.dependsOn(publicationTask)
              } else {
//                def publishTask = mavenPublicationByProject.project.tasks.findByName('publish')
//                task.dependsOn(publishTask)
//                task.dependsOn({ mavenPublicationByProject.project.tasks.findByName(taskName) })
                task.dependsOn(publication.getArtifacts())
              }
*/
              def publishTask = mavenPublicationByProject.project.tasks.findByName(PUBLISH_LOCAL_LIFECYCLE_TASK_NAME)
              task.dependsOn(publishTask)

              def assembleTask = mavenPublicationByProject.project.tasks.findByName(ASSEMBLE_TASK_NAME)
              task.dependsOn(assembleTask)
            }
          }
        }
      }
      project.task(DEBPKGTASK_NAME, type: BuildDebianPackageTask)
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy