使用Gradle将工件上传到Artifactory


84

我是Gradle和Artifactory的新手,我想将JAR文件上传到Artifactory。

这是我的build.gradle文件:

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'maven'
apply plugin: 'artifactory-publish'

groupId = 'myGroup'
version = '1.0'
def artifactId = projectDir.name
def versionNumber = version

artifactory {
    contextUrl = 'http://path.to.artifactory' // base artifactory url
    publish {
        repository {
            repoKey = 'libs-releases'   // Artifactory repository key to publish to
            username = 'publisher'      // publisher user name
            password = '********'       // publisher password
            maven = true
        }
    }
}

artifactoryPublish { 
    dependsOn jar
}

运行artifactoryPublish任务后,构建成功,如下所示:

> gradle artifactoryPublish  --stacktrace
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:artifactoryPublish
Deploying build info to: http://path.to.artifactory/api/build

BUILD SUCCESSFUL

Total time: 7.387 secs

但是,除了构建信息外,没有其他任何东西发送给Artifactory。

任何帮助都感激不尽。

编辑:

正如JBaruch所述,我添加了

apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

并将部分默认为人工任务

defaults {
   publications ('mavenJava')
}

现在可以了。

谢谢


2
感谢您提供的非常有用的问题和更新。有一个帮助我的便条:defaults实际上进入内部artifactory.publish,而不仅仅是根artifactory任务。
莱恩·沃尔斯

3
:我已经在博客中总结了本buransky.com/scala/...
瑞士雷达表Buransky

1
当我尝试它时,我得到:Error:(x, 0) Could not find property 'java' on SoftwareComponentInternal set.您能发布完整的脚本吗?
Nimrod Dayan 2015年

我正在编写上面的代码,用于上传放置在gradle文件夹(gradle / sample.jar)中的jar,我执行后发现仅上传构建信息。我有两个疑问。首先,我们在哪里指定要上传的jar,我们没有在任何地方指定路径。其次,如果我在artifactation.publish中写入默认部分,则会收到错误错误:(82,0)类型'PublishingExtension'的扩展名不存在。当前注册的扩展类型:[DefaultExtraPropertiesExtension,DefaultArtifactPublicationSet_Decorated ..任何解决方案?
sver

只要apply plugin: 'maven'生成了pom文件,并且'apply plugin: 'maven-publish'发布了jar文件。而且我不必拥有publishing.publications.mavenJava(MavenPublication) { from components.java }。但是,您必须拥有 default {publications ('mavenJava'); publishConfigs('archives', 'published') }
ravikanth

Answers:


55

那是因为您没有任何东西publications。该artifactory-publish插件可与maven-publish插件一起使用并上传publications

如果你喜欢用工作的老Maven插件,你需要artifactory插件,不artifactory-publish

在官方文档的“使用Gradle”页面中查看“概述”部分


5
嗨,JBrauch,谢谢您的回复。我已在帖子中添加了缺少的部分,以帮助其他人也遇到同样的问题。
tuncaysenturk 2014年

7
我希望来自人工制品的人来...因为maven-publish在文档中没有提到零。感谢@JBaruch的帮助!jfrog.com/confluence/display/RTF/…–
Ryan Walls

您可以认为我是“ artfactory的人” :)是官方文档中的解释。将其添加到答案。
JBaruch 2014年

5
@JBaruch仍然没有提到两个链接页面maven-publish。我同意@Ryan的看法,这会有所帮助。但是,谢谢您在这里提供的答案
Heinrich Filter

当前的文档示例使用的Android Studio gradle插件v0.9已完全过时和不推荐使用,最新版本为v1.5.0。/:当然,这些例子不与这个版本的工作
雷米DAVID

8

我得到了这个工作。我实际上使用的是已经创建的jar,因此我使用以下代码指定要上传的jar:

publishing {
    publications {
        mavenJava(MavenPublication) {
            // from components.java
            artifact file("path/jar-1.0.0.jar")
        }
    }
}

7

您需要插件:

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'

构建项目并从人工制品中检索罐子:

buildscript {
    repositories {
        maven {
            url 'http://[IP]:[PORT]/artifactory/gradle-dev'
            credentials {
                username = "${artifactory_user}"
                password = "${artifactory_password}"
            }
        }
        mavenCentral()
    }
    dependencies { classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.5.4" }
}

repositories {
    mavenCentral()
    mavenLocal()
}

人工配置:

artifactory {
    contextUrl = "${artifactory_contextUrl}"
    publish {
        repository {
            repoKey = 'gradle-dev-local'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true
        }
        defaults {
            publications('mavenJava')
        }
        publishBuildInfo = true
        publishArtifacts = true
        publishPom = true
    }
    resolve {
        repository {
            repoKey = 'gradle-dev'
            username = "${artifactory_user}"
            password = "${artifactory_password}"
            maven = true

        }
    }
}

并用于发布:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}

gradle.properties

artifactory_user=publisher
artifactory_password=*****
artifactory_contextUrl=http://IP:PORT/artifactory

因此,一切都很简单。如果要上传jar:

gradle artifactoryPublish

4

这是对我有用的命令 gradle clean build publish

apply plugin: 'maven-publish'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'maven'

group = 'com.mine'
version = '1.0.1-SNAPSHOT'

repositories{
    mavenCentral()
}

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile 'com.google.guava:guava:27.0-jre'
    testCompile 'junit:junit:4.12'
    //compile 'org.apache.commons:commons-lang3:3.8.1'
}

publishing {
    repositories {
        maven {
            url = 'https://artifactory.mine.net/artifactory/my-snapshots-maven'
            credentials {
                username 'user'
                password 'password'
            }
        }
    }
    publications{
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.