Prześlij artefakt do Artifactory przy użyciu Gradle

84

Jestem nowicjuszem w Gradle i Artifactory i chcę przesłać plik JAR do Artifactory.

Oto mój build.gradleplik:

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
}

Po uruchomieniu artifactoryPublishzadania kompilacja zakończyła się pomyślnie, jak pokazano poniżej:

> 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

Jednak nic nie jest wysyłane do Artifactory oprócz informacji o kompilacji.

Każda pomoc będzie mile widziana.

Edytować:

Jak wspomniał JBaruch, dodałem

apply plugin: 'maven-publish'

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

i domyślna sekcja zadania artefaktycznego

defaults {
   publications ('mavenJava')
}

Teraz działa.

Dzięki

tuncaysenturk
źródło
2
Dzięki za bardzo pomocne pytanie i aktualizację. Jedna uwaga, która mi pomogła: defaultsfaktycznie wchodzi do środka artifactory.publish, a nie tylko do artifactoryzadania głównego .
Ryan Walls
3
Podsumowałem to na blogu: buransky.com/scala/ ...
Rado Buransky
1
kiedy spróbuję, dostaję: Error:(x, 0) Could not find property 'java' on SoftwareComponentInternal set.Czy mógłbyś opublikować pełny scenariusz?
Nimrod Dayan
Piszę powyższy kod do załadowania jar, który umieściłem w moim folderze gradle (gradle / sample.jar), wykonuję i widzę, że przesyłane są tylko informacje o kompilacji. Mam 2 wątpliwości. Po pierwsze, gdzie określamy, który plik jar do przesłania, nigdzie nie określiliśmy ścieżki. Po drugie, jeśli napiszę sekcję domyślną w artifaction.publish, otrzymuję błąd Błąd: (82, 0) Rozszerzenie typu „PublishingExtension” nie istnieje. Aktualnie zarejestrowane typy rozszerzeń: [DefaultExtraPropertiesExtension, DefaultArtifactPublicationSet_Decorated .. Jakiekolwiek rozwiązanie?
sver
o ile mamy apply plugin: 'maven'wygenerowany plik pom i jeśli mamy 'apply plugin: 'maven-publish'plik jar zostanie opublikowany. I nie musiałem publishing.publications.mavenJava(MavenPublication) { from components.java }. Jednak musisz mieć default {publications ('mavenJava'); publishConfigs('archives', 'published') }
ravikanth

Odpowiedzi:

55

To dlatego, że ich nie masz publications. artifactory-publishWtyczka współpracuje z maven-publishwtyczką i przesyłania publications.

Jeśli wolisz pracować ze starą wtyczką maven , potrzebujesz artifactorywtyczki , a nie artifactory-publish.

Zapoznaj się z częścią Przegląd na stronie „Praca z Gradle” w oficjalnych dokumentach.

JBaruch
źródło
5
Cześć JBrauch Dzięki za twoją odpowiedź. Dodałem brakujące części do postu, aby pomóc innym mieć ten sam problem.
tuncaysenturk
7
Mam nadzieję, że przyjdzie ktoś z Artifactory ... bo maven-publishw dokumentacji nie ma o tym wzmianki . Dzięki za pomoc @JBaruch! jfrog.com/confluence/display/RTF/…
Ryan Walls
Możesz mnie uważać za „kogoś z artfactory” :) Oto wyjaśnienie w oficjalnej dokumentacji. Dodając to do odpowiedzi.
JBaruch
5
@JBaruch nadal nie wspomina o żadnej z dwóch połączonych stron maven-publish. Zgadzam się z @Ryan, że byłoby to pomocne. Ale dzięki za odpowiedź tutaj
Heinrich Filter,
Obecne przykłady dokumentów używają wtyczki Gradle Android Studio w wersji 0.9, która jest całkowicie przestarzała i przestarzała, najnowsza to 1.5.0. Oczywiście przykłady nie działają z tą wersją: /
Rémy DAVID
8

Mam to działające. W rzeczywistości korzystałem z już utworzonego słoika, więc używam poniższego kodu, aby określić mój słoik, który ma zostać przesłany:

publishing {
    publications {
        mavenJava(MavenPublication) {
            // from components.java
            artifact file("path/jar-1.0.0.jar")
        }
    }
}
sver
źródło
7

Potrzebujesz wtyczek:

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

aby zbudować projekt i odzyskać słoiki z artefaktury:

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

Konfiguracje Artifactory:

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

        }
    }
}

i do publikacji:

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

gradle.properties

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

Więc wszystko jest po prostu proste. Jeśli chcesz przesłać swój jar:

gradle artifactoryPublish
grep
źródło
4

To właśnie zadziałało dla mnie z poleceniem 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
        }
    }
}
gary69
źródło