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

com.github.jchanghong.configurationPlugin.kt Maven / Gradle / Ivy

The newest version!
package com.github.jchanghong

import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.RepositoryHandler
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPom
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.api.tasks.javadoc.Javadoc
import org.gradle.external.javadoc.StandardJavadocDocletOptions
import org.gradle.plugins.signing.SigningExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile


internal fun configurationPlugin(project: Project, myExtension: JchPluginExtension) {
    log2("configurationPlugin()", project, myExtension.logInfo)
    project.pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
        project.tasks.withType(KotlinCompile::class.java).configureEach {
            it.kotlinOptions.jvmTarget = "1.8"
            it.kotlinOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
            log2("it.kotlinOptions.jvmTarget=\"1.8\"", project, myExtension.logInfo)
        }
    }
    project.pluginManager.withPlugin("java-library") {
        project.extensions.findByType(JavaPluginExtension::class.java)?.let {
            it.withSourcesJar()
            it.withJavadocJar()
            log2("withJavadocJar withSourcesJar", project, myExtension.logInfo)
        }
        project.tasks.withType(Javadoc::class.java) {
            if (JavaVersion.current().isJava9Compatible) {
                (it.options as StandardJavadocDocletOptions).addBooleanOption("html5", true)
            }
        }
    }
    project.pluginManager.withPlugin("java") {
        project.tasks.withType(JavaCompile::class.java).configureEach {
            it.targetCompatibility = "1.8"
            log2("java.targetCompatibility=\"1.8\"", project, myExtension.logInfo)
        }
    }
    project.pluginManager.withPlugin("io.spring.dependency-management") {
        val managementExtension =
            project.extensions.findByType(io.spring.gradle.dependencymanagement.internal.dsl.StandardDependencyManagementExtension::class.java)
        managementExtension?.imports {
            it.mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
        }
        log2("apply plugin boot DependencyManagementPlugin", project, myExtension.logInfo)
    }

    addJCHmavenpublish(project, myExtension)
}

internal fun addJCHmavenpublish(project: Project, myExtension: JchPluginExtension) {
//    project.pluginManager.withPlugin("name.remal.maven-publish-nexus-staging") {
//        project.tasks.findByName("releaseNexusRepositories")?.dependsOn("publish")
//    }
    project.pluginManager.withPlugin("maven-publish") {
        val publishingExtension = project.extensions.findByType(PublishingExtension::class.java)
        if (publishingExtension != null) {
            val mavenPublication = publishingExtension.publications.maybeCreate("JCH", MavenPublication::class.java)
            mavenPublication.from(project.components.findByName("java"))
            mavenPublication.pom {
                setMavenPOM(it)
            }
            publishingExtension.repositories {
                setPublishRepositoryHandler(it, project)
            }
            val signingExtension = project.extensions.findByType(SigningExtension::class.java)
            if (signingExtension != null) {
                signingExtension.sign(mavenPublication)
                log2("add mavenPublication JCH", project, myExtension.logInfo)
            }
        }
    }
}

internal fun setPublishRepositoryHandler(repositoryHandler: RepositoryHandler?, project: Project) {
    repositoryHandler?.apply {
        maven {
            it.name = "sona"
            val releasesRepoUrl = project.uri("https://oss.sonatype.org/service/local/staging/deploy/maven2")
            val snapshotsRepoUrl = project.uri("${project.buildDir}/repos/snapshots")
//            val releasesRepoUrl = uri("$buildDir/repos/releases")

            it.url = if (project.version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl
            if (it.url.toString().startsWith("http")) {
                it.isAllowInsecureProtocol = true
                it.credentials {
                    it.username = "jchanghong"
                    it.password = "!b58r5gsHu*0"
                }
            }
        }
    }
}

internal fun createPublishRepositoryHandler(
    repositoryHandler: RepositoryHandler?,
    project: Project
): MavenArtifactRepository? {
    repositoryHandler ?: return null
    return repositoryHandler.maven {
        it.name = "sona"
        val releasesRepoUrl = project.uri("https://oss.sonatype.org/service/local/staging/deploy/maven2")
        val snapshotsRepoUrl = project.uri("${project.buildDir}/repos/snapshots")
        //            val releasesRepoUrl = uri("$buildDir/repos/releases")

        it.url = if (project.version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl
        if (it.url.toString().startsWith("http")) {
            it.isAllowInsecureProtocol = true
            it.credentials {
                it.username = "jchanghong"
                it.password = "!b58r5gsHu*0"
            }
        }
    }
}

internal fun setMavenPOM(mavenPom: MavenPom?) {
    mavenPom?.apply {
        name.set("kotlin-lib")
        description.set("kotlin java tools")
        url.set("http://www.example.com/library")
        licenses {

            it.license {
                it.name.set("The Apache License, Version 2.0")
                it.url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
            }
        }
        developers {
            it.developer {
                it.email.set("[email protected]")
            }
        }
        scm {
            it.connection.set("scm:git:https://github.com/jchanghong/utils.git")
            it.developerConnection.set("scm:git:[email protected]:jchanghong/utils.git")
            it.url.set("[email protected]:jchanghong/utils.git")
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy