Tải phần mềm lên Artifactory bằng Gradle


84

Tôi là người mới sử dụng Gradle và Artifactory và tôi muốn tải tệp JAR lên Artifactory.

Đây là build.gradletệp của tôi :

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
}

Sau khi chạy artifactoryPublishtác vụ, quá trình xây dựng thành công như hình dưới đây:

> 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

Tuy nhiên, không có gì được gửi đến Artifactory ngoại trừ thông tin bản dựng.

Bất kỳ sự giúp đỡ sẽ được nhiều đánh giá cao.

Biên tập:

Như JBaruch đã đề cập, tôi đã thêm

apply plugin: 'maven-publish'

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

và phần mặc định cho tác vụ nhân tạo

defaults {
   publications ('mavenJava')
}

Bây giờ nó hoạt động.

Cảm ơn


2
Cảm ơn vì câu hỏi rất hữu ích và cập nhật. Một lưu ý đã giúp tôi: defaultsthực sự đi vào bên trong artifactory.publish, không chỉ trong artifactorytác vụ root .
Ryan Walls

3
Tôi đã tóm tắt này trong một blog: buransky.com/scala/...
Rado Buransky

1
khi tôi thử, tôi nhận được: Error:(x, 0) Could not find property 'java' on SoftwareComponentInternal set.Bạn có thể vui lòng đăng toàn bộ tập lệnh được không?
Nimrod Dayan

Tôi đang viết đoạn mã trên để tải lên một cái lọ mà tôi đã đặt trong thư mục gradle của mình (gradle / sample.jar), tôi thực thi và thấy rằng chỉ có thông tin bản dựng đang được tải lên. Tôi có 2 nghi ngờ. Thứ nhất, chúng tôi đang chỉ định jar nào để tải lên, chúng tôi không chỉ định đường dẫn ở bất kỳ đâu. Thứ hai, Nếu tôi viết phần mặc định trong Artificial Intelligence.publish, tôi gặp lỗi Error: (82, 0) Phần mở rộng của loại 'PublishingExtension' không tồn tại. Các loại tiện ích mở rộng được đăng ký hiện tại: [DefaultExtraPropertiesExtension, DefaultArtifactPublicationSet_Decorated .. Có giải pháp nào không ??
sver

miễn là chúng tôi có apply plugin: 'maven'tệp pom được tạo và nếu chúng tôi có 'apply plugin: 'maven-publish'tệp jar được xuất bản. Và tôi không cần phải có publishing.publications.mavenJava(MavenPublication) { from components.java }. Tuy nhiên bạn phải có default {publications ('mavenJava'); publishConfigs('archives', 'published') }
ravikanth

Câu trả lời:


55

Đó là bởi vì bạn không có bất kỳ publications. Các artifactory-publishPlugin làm việc với maven-publishPlugin và tải lên publications.

Nếu bạn thích làm việc với plugin maven cũ , bạn cần artifactoryplugin chứ không phải artifactory-publish.

Hãy xem phần Tổng quan trong trang "Làm việc với Gradle" của các tài liệu chính thức.


5
Xin chào JBrauch Cảm ơn bạn đã phản hồi. Tôi đã thêm những phần còn thiếu vào bài đăng để giúp những người khác có cùng vấn đề.
tuncaysenturk

7
Tôi hy vọng một người nào đó từ nhà nghệ thuật đến ... bởi vì không có đề cập đến maven-publishtrong tài liệu. Cảm ơn sự giúp đỡ @JBaruch! jfrog.com/confluence/display/RTF/…
Ryan Walls

Bạn có thể coi tôi là "ai đó từ artfactory" :) Đây là lời giải thích trong tài liệu chính thức. Thêm nó vào câu trả lời.
JBaruch

5
@JBaruch vẫn không đề cập đến hai trang được liên kết maven-publish. Tôi đồng ý với @Ryan rằng nó sẽ hữu ích. Nhưng nhờ cho câu trả lời ở đây
Heinrich Lọc

Các ví dụ tài liệu hiện tại sử dụng plugin Gradle Android Studio v0.9 đã hoàn toàn lỗi thời và không được dùng nữa, mới nhất là v1.5.0. Tất nhiên, các ví dụ không làm việc với phiên bản này: /
Rémy DAVID

8

Tôi đã làm việc này. Tôi thực sự đang sử dụng một jar đã được tạo sẵn vì vậy tôi đang sử dụng mã dưới đây để chỉ định jar của tôi sẽ được tải lên:

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

7

Bạn cần các plugin:

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

để xây dựng dự án và lấy các lọ từ nghệ nhân:

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()
}

Cấu hình có sẵn:

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

        }
    }
}

và để xuất bản:

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

gradle.properties

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

Vì vậy, mọi thứ chỉ là đơn giản. Nếu bạn muốn tải lên bình của mình:

gradle artifactoryPublish

4

Đây là những gì làm việc cho tôi với lệnh 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
        }
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.