将 Jfrog.Artifactory 配置转换为 gradle-kotlin-dsl

10

我正在尝试从Groovy迁移到Gradle Kotlin DSL,但由于对它不熟悉,所以我不知道如何配置Jfrog Artifactory。请帮助我将以下代码部分转换为Gradle Kotlin DSL:

task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

artifactory {
    contextUrl = "http://10.0.0.49:8081/artifactory"
    publish {
        repository {
            repoKey = 'gradle-dev-local'
            username = artifactory_username
            password = artifactory_password
        }
        defaults {
            publications('mavenJava')
            publishArtifacts = true
            publishPom = true
        }
    }
}



publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = "ua.tiras.oloader"
            artifactId = 'core'
            version = "1.0.62"
            artifact("$buildDir/libs/${project.getName()}.jar")
            artifact sourceJar {
                classifier "sources"
            }
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.api.allDependencies.each { dependency ->
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dependency.group)
                    dependencyNode.appendNode('artifactId', dependency.name)
                    dependencyNode.appendNode('version', dependency.version)
                }
            }
        }
    }
}
4个回答

20

我是这样解决的:

val sourcesJar by tasks.creating(Jar::class) {
    dependsOn(JavaPlugin.CLASSES_TASK_NAME)
    classifier = "sources"
    from(sourceSets["main"].allSource)
}

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            groupId = "ua.tiras"
            artifactId = "aloader-core"
            version = "0.0.4"

            artifact(sourcesJar)
            artifact("$buildDir/libs/${project.name}.jar")

            pom {
                withXml {
                    asNode().appendNode("dependencies").let {
                        for (dependency in configurations["api"].dependencies) {
                            it.appendNode("dependency").apply {
                                appendNode("groupId", dependency.group)
                                appendNode("artifactId", dependency.name)
                                appendNode("version", dependency.version)
                            }
                        }
                    }
                }
            }
        }
    }
}

artifactory {
    setContextUrl("http://dev.tirascloud.com:8081/artifactory")
    publish(delegateClosureOf<PublisherConfig> {
        repository(delegateClosureOf<GroovyObject> {
            setProperty("repoKey", "gradle-dev-local")
            setProperty("username", project.findProperty("artifactory_username") ?: "nouser")
            setProperty("password", project.findProperty("artifactory_password") ?: "nopass")
        })
        defaults(delegateClosureOf<GroovyObject> {
            invokeMethod("publications", "mavenJava")
            setProperty("publishPom", true)
            setProperty("publishArtifacts", true)
        })
    })
    resolve(delegateClosureOf<ResolverConfig> {
        setProperty("repoKey", "repo")
    })

只有我一个人在建议中没有看到“jfrog”吗? - eel ghEEz
Artifactory是由JFrog开发的。它不仅仅指代OJO(oss.jfrog.org),而且本身就是JFrog Artifactory产品的一个实例。Artifactory插件适用于任何Artifactory实例。 - snowe
以下是更好/更新的答案-需要更少的代码:-) - undefined

4
我找到了另一个例子 - JFrog 的官方案例:

https://github.com/jfrog/project-examples/blob/master/gradle-examples/gradle-kts-example-publish/build.gradle.kts


import org.jfrog.gradle.plugin.artifactory.task.ArtifactoryTask

buildscript {
    repositories {
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath("org.jfrog.buildinfo", "build-info-extractor-gradle", "4.+")
    }
    configurations.classpath {
        resolutionStrategy {
            cacheDynamicVersionsFor(0, "seconds")
            cacheChangingModulesFor(0, "seconds")
        }
    }
}

plugins {
    java
    `maven-publish`
}

fun javaProjects() = subprojects.filter {
    File(it.projectDir, "src").isDirectory
}

val currentVersion: String by project

allprojects {
    apply(plugin = "com.jfrog.artifactory")

    group = "org.jfrog.test.gradle.publish"
    version = currentVersion
    status = "Integration"

    repositories {
        maven("http://127.0.0.1:8081/artifactory/libs-release")
    }
}

tasks.named<ArtifactoryTask>("artifactoryPublish") {
    skip = true
}

project("services") {
    tasks.named<ArtifactoryTask>("artifactoryPublish") {
        skip = true
    }
}

configure(javaProjects()) {
    apply(plugin = "java")
    apply(plugin = "maven-publish")

    dependencies {
        testImplementation("junit:junit:4.7")
    }

    configure<PublishingExtension> {
        publications {
            register<MavenPublication>("mavenJava") {
                from(components.getByName("java"))
                artifact(file("$rootDir/gradle.properties"))
            }
        }
    }
}

project("api") {
    apply(plugin = "ivy-publish")

    configure<PublishingExtension> {
        publications {
            register<IvyPublication>("ivyJava") {
                from(components.getByName("java"))

                artifact(file("$rootDir/settings.gradle.kts")) {
                    name = "gradle-settings"
                    extension = "txt"
                    type = "text"
                }
                // The config below will add a extra attribute to the ivy.xml
                // See http://ant.apache.org/ivy/history/latest-milestone/concept.html#extra
                descriptor.withXml {
                    val info = asNode().get("info") as groovy.util.NodeList
                    val first = info.first() as groovy.util.Node
                    first.attributes()["e:architecture"] = "amd64"
                }
            }
        }
    }

    tasks.named<ArtifactoryTask>("artifactoryPublish") {
        publications(publishing.publications["ivyJava"])
    }
}

configure<org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention> {
    clientConfig.isIncludeEnvVars = true

    setContextUrl("http://127.0.0.1:8081/artifactory")
    publish {
        repository {
            setRepoKey("libs-snapshot-local") // The Artifactory repository key to publish to
            setUsername(findProperty("artifactory_user")) // The publisher user name
            setPassword(findProperty("artifactory_password")) // The publisher password
            // This is an optional section for configuring Ivy publication (when publishIvy = true).
            ivy {
                setIvyLayout("[organization]/[module]/ivy-[revision].xml")
                setArtifactLayout("[organization]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]")
                setMavenCompatible(true) // Convert any dots in an [organization] layout value to path separators, similar to Maven"s groupId-to-path conversion. True if not specified
            }
        }

        defaults {
            // Reference to Gradle publications defined in the build script.
            // This is how we tell the Artifactory Plugin which artifacts should be
            // published to Artifactory.
            publications("mavenJava")
            setPublishArtifacts(true)
            // Properties to be attached to the published artifacts.
            setProperties(mapOf(
                "qa.level" to "basic",
                "dev.team" to "core"
            ))
            setPublishPom(true) // Publish generated POM files to Artifactory (true by default)
            setPublishIvy(true) // Publish generated Ivy descriptor files to Artifactory (true by default)
        }
    }
}


2

对我来说,已接受的答案在使用Artifactory插件版本4.27.1时无效。一个好的检查位置肯定是JFrog提供的示例。这里是基于官方示例的简化提取:

configure<org.jfrog.gradle.plugin.artifactory.dsl.ArtifactoryPluginConvention> {
    clientConfig.isIncludeEnvVars = true

    setContextUrl(findProperty("artifactory_url"))
    publish {
        repository {
            setRepoKey(repoKeyValue) // The Artifactory repository key to publish to
            setUsername(findProperty("artifactory_user")) // The publisher user name
            setPassword(findProperty("artifactory_password")) // The publisher password
            setMavenCompatible(true)
        }

        defaults {
            publications("mypublicationreference")
            setPublishArtifacts(true)            
        }
    }
}

configure<PublishingExtension> {
    publications {
        register<MavenPublication>("mypublicationreference") {
            from(components.getByName("java"))
            artifact("$buildDir/libs/${project.name}.jar")
        }
    }
}

请注意,如artifactory_url之类的引用属性可以在gradle.properties文件中定义。

0

你可以这样简化接受的答案。

plugins {
    id("com.jfrog.artifactory") version "4.32.0"
}

repositories {
    maven("https://jcenter.bintray.com/")
    mavenLocal()
    mavenCentral()
}

// If you set these values in gradle.properties

val artifactoryContextUrl: String by project
val artifactoryUser: String by project
val artifactoryPassword: String by project

artifactory {
    setContextUrl(artifactoryContextUrl)
    publish {
        repository {
            setProperty("repoKey", "gradle-dev-local")
            setProperty("username", artifactoryUser)
            setProperty("password", artifactoryPassword)
        }
        defaults {
            invokeMethod("publications", "mavenJava")
            setProperty("publishPom", true)
            setProperty("publishArtifacts", true)
        }
    }
    resolve {
        setProperty("repoKey", "repo")
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接