Publikuj migawkę vs Publikuj Release w Gradle z ciągłą integracją

Właśnie uczę się Gradle, wywodzącego się zarówno z ant + Ivy, jak i Mavena i staram się zawinąć w głowę właściwy sposób, aby opublikować wersję release mojego oprogramowania za pomocą gradle. Muszę również stale integrować swoje projekty bez konieczności ciągłego wydawania niezależnych artefaktów.

Ant + Ivy

W świecie Ant + Ivy mogę tworzyć cele publishSnapshot i publishRelease. Każdy z nich może użyć różnych resolverów Ivy, aby rozwiązać i opublikować do moja osobna migawka lub repozytoria wydania w Nexusie.

Maven

W Mavenie mogę zdefiniować snapshotRepository LUB repository w mojej sekcji distributionManagement, aby Maven publikował w moim oddzielnym migawce lub repozytoriach wydania w Nexusie.

Gradle

Teraz wejdź do gradle. Jak mogę osiągnąć tę samą funkcjonalność? Używam repozytoriów w stylu ivy.

Dziękuję za wszelkie spostrzeżenia, które możesz dostarczyć.

Odpowiedź

Dzięki odpowiedzi René poniżej w końcu udało mi się stworzyć wykonalne rozwiązanie. Sednem sprawy było to, że musiałem stale integrować wszystkie moje projekty. W tym celu pomyślałem, że zadeklarowanie zależności przy użyciu numeru wersji latest.integration było jedynym sposobem na ściągnięcie najnowszej wersji moich bibliotek, dlatego musiałem użyć repozytoriów w stylu ivy.

W rzeczywistości, istnieją inne sposoby, aby pobrać najnowszą wersję bibliotek w celu ciągłej integracji mojego oprogramowania we wszystkich projektach. Na rozwiązaniem jest użycie uploadArchives Dokładnie tak, jak podałem poniżej (należy również pamiętać, że aby to zadziałało, musisz użyć apply plugin: 'maven'. Upewnij się, że Twoje repozytoria są również w stylu maven, a deklarując zależność, możesz użyć dynamicznych numerów wersji, jak pokazano tutaj . W moim przypadku wymieniłem globalny numer wersji w moim wspólnym.gradle i w kolejnych projektach użyłem version: version do odniesienia się do zmiennej global version. W ten sposób każdy Artefakt w moim systemie ma tę samą wersję. Kiedy nadszedł czas, aby release, mogę zmienić to z 1.0-migawka do 1.0 i zbudować każdy w kolejności.

Author: Community, 2013-05-25

2 answers

Możesz skonfigurować migawkę i repozytorium release w zadaniu "Upload" (np. uploadArchives) zadanie:

uploadArchives {  
    repositories {  
        mavenDeployer {  
            repository(url: 'http://myCompanyRepo.com:8081/releases') {  
                authentication(userName: 'admin', password: 'password');  
            }  
            snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') {
                authentication(userName: 'admin', password: 'password');  
            }  
        }  
    }  
}

Dla wersji *-SNAPSHOT używany jest snapshotRepository. W przeciwnym razie używane jest repo releases.

 46
Author: Rene Groeschke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 10:02:56

Jeśli chcesz użyć nowej wtyczki maven-publish, możesz przesłać ją do różnych repozytoriów za pomocą if:

apply plugin: 'maven-publish'

...

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            credentials {
                username "anonymous"
            }

            if(project.version.endsWith('-SNAPSHOT')) {
                url "http://example/artifactory/libs-snapshot-local"
            } else {
                url "http://example/artifactory/libs-release-local"
            }
        }
    }
}

Reference: maven-publish and setting snapshotRepository and releaseRepository

 40
Author: Paolo Fulgoni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 10:04:11