Gradle不会将jars复制到Maven .m2文件夹

时间:2019-05-09 22:06:56

标签: maven gradle kotlin

build.gradle文件中可能缺少哪些内容,阻止了publishToMavenLocal不将文件复制到.m2文件夹中?

该脚本确实具有“ maven-publish”插件。

buildscript {
    ext.kotlinVersion = '1.3.10'
    ext.dokkaVersion = '0.9.17'
    repositories { mavenLocal() }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokkaVersion"
    }
}

plugins {
    id 'com.github.hierynomus.license' version '0.15.0'
    id 'io.codearte.nexus-staging' version '0.11.0'
    id 'maven-publish'
}

group = 'org.jetbrains.xodus'
version = hasProperty('xodusVersion') ? project.xodusVersion : ''
def isSnapshot = version.endsWith('SNAPSHOT')
def isDailyBuild = hasProperty('dailyBuild') ? project.dailyBuild : false
def mavenPublishUrl = hasProperty('mavenPublishUrl') ? project.mavenPublishUrl : ''
def mavenPublishUsername = hasProperty('mavenPublishUsername') ? project.mavenPublishUsername : ''
def mavenPublishPassword = hasProperty('mavenPublishPassword') ? project.mavenPublishPassword : ''
def signingKeyId = hasProperty('signingKeyId') ? project.signingKeyId : ''
def signingPassword = hasProperty('signingPassword') ? project.signingPassword : ''
def signingSecretKeyRingFile = hasProperty('signingSecretKeyRingFile') ? project.signingSecretKeyRingFile : '../key.gpg'

static def shouldDeploy(project) {
    return project.version.length() > 0 && !(project.name in ['benchmarks', 'samples'])
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.5.1'
}

defaultTasks 'assemble'

// Use nexus-staging-plugin to workaround https://issues.sonatype.org/browse/OSSRH-5454
nexusStaging {
    username = mavenPublishUsername
    password = mavenPublishPassword
    delayBetweenRetriesInMillis = 30000
    stagingProfileId = "89ee7caa6631c4"
}

subprojects {
    apply plugin: 'license'
    apply plugin: 'java'
    apply plugin: 'kotlin'
    apply plugin: 'maven'
    apply plugin: 'signing'
    apply plugin: 'org.jetbrains.dokka'

    sourceCompatibility = 1.7
    compileJava.options.encoding = 'UTF-8'
    group = rootProject.group
    version = rootProject.version
    archivesBaseName = rootProject.name + '-' + project.name

    license {
        header rootProject.file('license/copyright.ftl')
        strictCheck true
        ext.inceptionYear = 2010
        ext.year = Calendar.getInstance().get(Calendar.YEAR)
        ext.owner = 'JetBrains s.r.o.'
        include "**/*.kt"
        include "**/*.java"
        mapping {
            kt = 'JAVADOC_STYLE'
        }
    }

    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.12'
        testCompile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
    }

    // tests for most of sub-projects run with database encryption turned on
    if (!(project.name in ['benchmarks', 'compress', 'crypto', 'openAPI', 'samples', 'utils'])) {
        test {
            systemProperty 'exodus.cipherId', 'jetbrains.exodus.crypto.streamciphers.ChaChaStreamCipherProvider'
            systemProperty 'exodus.cipherKey', '000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f'
            systemProperty 'exodus.cipherBasicIV', '314159262718281828'
            // uncomment the following line to run tests in-memory
            //systemProperty 'exodus.log.readerWriterProvider', 'jetbrains.exodus.io.inMemory.MemoryDataReaderWriterProvider'
        }
        dependencies {
            testCompile project(':crypto')
        }
    }

    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }

    jar {
        manifest {
            attributes 'Implementation-Title': archivesBaseName, 'Implementation-Version': version
        }
    }

    test {
        minHeapSize = '1g'
        maxHeapSize = '1g'
        //jvmArgs = ['-ea', '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=2808']
        //testLogging.showStandardStreams = true
    }

    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        duplicatesStrategy 'exclude'
        includeEmptyDirs false
        from javadoc.destinationDir
    }
    javadoc.failOnError = false
    // work around for Java 8 javadoc which is too strict
    if (JavaVersion.current().isJava8Compatible()) {
        tasks.withType(Javadoc) {
            options.addStringOption('Xdoclint:none', '-quiet')
        }
    }

    task sourceJar(type: Jar) {
        classifier = 'sources'
        duplicatesStrategy 'exclude'
        includeEmptyDirs false
        from project.sourceSets.main.java
        from project.sourceSets.main.kotlin
    }

    // configuring projects with Kotlin sources
    dependencies {
        compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
        compile 'io.github.microutils:kotlin-logging:1.5.4'
    }
    compileKotlin {
        kotlinOptions {
            languageVersion = '1.2'
            apiVersion = '1.2'
        }
    }
    compileTestKotlin {
        kotlinOptions {
            languageVersion = '1.2'
            apiVersion = '1.2'
        }
    }
    dokka {
        jdkVersion = 7
        packageOptions {
            reportUndocumented = false
        }
    }
    task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
        outputFormat = 'javadoc'
        outputDirectory = "$buildDir/javadoc"
    }
    javadocJar {
        dependsOn dokkaJavadoc
        from dokkaJavadoc.outputDirectory
    }

    artifacts {
        archives jar, javadocJar, sourceJar
    }

    if (!isSnapshot && signingKeyId.length() > 0) {
        ext.'signing.keyId' = signingKeyId
        ext.'signing.password' = signingPassword
        ext.'signing.secretKeyRingFile' = signingSecretKeyRingFile
    }

    afterEvaluate { project ->
        if (shouldDeploy(project)) {
            uploadArchives {
                repositories {
                    mavenDeployer {

                        beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

                        if (isDailyBuild) {
                            repository(url: "https://api.bintray.com/maven/jetbrains/xodus/" + archivesBaseName + "/;publish=1") {
                                authentication(userName: mavenPublishUsername, password: mavenPublishPassword)
                            }
                        } else {
                            repository(url: mavenPublishUrl) {
                                authentication(userName: mavenPublishUsername, password: mavenPublishPassword)
                            }
                        }

                        pom.project {
                            name 'Xodus'
                            description 'Xodus is pure Java transactional schema-less embedded database'
                            packaging 'jar'
                            url 'https://github.com/JetBrains/xodus'

                            scm {
                                url 'https://github.com/JetBrains/xodus'
                                connection 'scm:git:https://github.com/JetBrains/xodus.git'
                                developerConnection 'scm:git:https://github.com/JetBrains/xodus.git'
                            }

                            licenses {
                                license {
                                    name 'The Apache Software License, Version 2.0'
                                    url 'http://www.apache.org/license/LICENSE-2.0.txt'
                                    distribution 'repo'
                                }
                            }

                            developers {
                                developer {
                                    id 'JetBrains'
                                    name 'JetBrains Team'
                                    organization 'JetBrains s.r.o'
                                    organizationUrl 'http://www.jetbrains.com'
                                }
                            }
                        }
                    }
                }
            }
            signing {
                required { !isSnapshot && signingKeyId.length() > 0 && gradle.taskGraph.hasTask('uploadArchives') }
                sign configurations.archives
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的构建没有配置任何发布,因此publishToMavenLocal任务是noop:

$ ./gradlew --console=verbose publishToMavenLocal
> Task :publishToMavenLocal UP-TO-DATE

BUILD SUCCESSFUL in 0s

如本例中那样配置发布时...

task buildMyArtifact(type: Zip) {
    // TODO using the build script as a sample file here; use whatever makes
    //   sense for your project
    from 'build.gradle'
    archiveBaseName = 'whateverNameInBuildDir'
    destinationDirectory = buildDir
}

publishing {
    publications {
        myPublication(MavenPublication) {
            artifact buildMyArtifact
            groupId 'com.example'
            artifactId 'my-module'
            version '1.0.0'
        }
    }
}

…然后publishToMavenLocal任务将发布安装到本地Maven存储库中:

$ ./gradlew --console=verbose publishToMavenLocal
> Task :buildMyArtifact
> Task :generatePomFileForMyPublicationPublication
> Task :publishMyPublicationPublicationToMavenLocal
> Task :publishToMavenLocal

BUILD SUCCESSFUL in 1s
3 actionable tasks: 3 executed

$ tree ~/.m2/repository/com/example/my-module/
/home/chriki/.m2/repository/com/example/my-module/
├── 1.0.0
│   ├── my-module-1.0.0.pom
│   └── my-module-1.0.0.zip
└── maven-metadata-local.xml

1 directory, 3 files