/ / Поправяне на издание за издаване на плъгини Gradle Artifactory - groovy, gradle, artfactory

Определяне на графичен изкуствен принтер публикуване издаване - groovy, graled, изкуствено

Имам мултипроектна конструкция, която изграждам с Gradle:

myapp/
myapp-client/
myapp-shared/
myapp-server/
build.gradle
settings.gradle

Където settings.gradle изглежда като:

include ":myapp-shared"
include ":myapp-client"
include ":myapp-server"

Успешно имам Gradle за компилиране на моя изходен код Groovy, пускане на тестове на единици, генериране на GroovyDocs и пакетиране на двоични и изходни JAR за всички 3 подпроекта. Извикването за изграждане, за което е: gradle clean build groovydoc sourcesJar -Pversion=<whatever version I specify>.

Сега се опитвам да добавя приставката Gradle-Artifactory така, че:

  • Всички 3 подпроекта получават POM, генерирани за тях; и
  • Всички 3 подпроекта двоични JAR, POMs и JAR източници се публикуват в моя артикулатор на местно ниво; и
  • Най- artifactoryPublish задача се изпълнява винаги gradle build се извиква

Ето моят най-добър опит (моят завършен build.gradle):

allprojects {
buildscript {
repositories {
maven {
url "http://localhost:8081/artifactory/plugins-release"
credentials {
username = "admin"
password = "password"
}
name = "maven-main-cache"
}
}
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1"
}
}

apply plugin: "groovy"
apply plugin: "maven"
apply plugin: "maven-publish"
apply plugin: "com.jfrog.artifactory"

version="0.0.1"
group = "mygroup"

repositories {
mavenCentral()
add buildscript.repositories.getByName("maven-main-cache")
maven {
url "http://localhost:8081/artifactory/mydev-snapshots"
}
}

artifactory {
contextUrl = "http://localhost:8081/artifactory"
publish {
repository {
repoKey = "mydev-snapshots"
username = "admin"
password = "password"
maven = true
}
defaults {
publications ("mavenJava")
}
}
}

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

rootProject {
artifactoryPublish.skip=true
}

subprojects {
apply plugin: "groovy"
apply plugin: "eclipse"

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

[compileJava, compileTestJava]*.options*.encoding = "utf-8"

repositories {
mavenLocal()
mavenCentral()
maven {
url "https://repository.apache.org/content/repositories/snapshots"
}
maven {
url "http://localhost:8081/artifactory/mydev-snapshots"
}
maven {
url "https://code.google.com/p/guava-libraries/"
}
}

dependencies {
compile (
"org.codehaus.groovy:groovy-all:2.3.7"
)
}

task sourcesJar(type: Jar, dependsOn: classes) {
classifier = "sources"
from sourceSets.main.allSource
}

task wrapper(type: Wrapper) {
gradleVersion = "1.11"
}

build(dependsOn: "artifactoryPublish")
}

Когато бягам gradle clean build groovydoc sourcesJar -Pversion=0.1.1, Получавам следното изключение на командния ред:

FAILURE: Build failed with an exception.

* Where:
Build file "C:Usersmyusersandboxeclipseworkspacemyappbuild.gradle" line: 14

* What went wrong:
A problem occurred evaluating root project "myapp".
> You can"t change a configuration which is not in unresolved state!

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.589 secs

Въпросът ми: какво се случва тук и какво трябва да направя (конкретно), за да го поправя и да получа публикуването на плъгин Artifactory?

Въпрос за бонус: Посочвам номера на версията на 2 места (извикване за изграждане, както и вътре в build.gradle файл. Искам да посоча номер на версията само чрез извикването на компилацията Как да конфигурирам artifactoryPublish (или по-скоро плъгин Gradle-Artifactory), за да приема версията, която посочвам от командния ред?

Отговори:

3 за отговор № 1

Брой въпроси тук:

  1. buildscript трябва да бъде блок от най-високо ниво, а не вътре allprojects
  2. Когато използвате Artifactory, не е необходимо да указвате други хранилища с изключение на Artifactory (не е необходимо mavenCentral())
  3. Ако искате да използвате artifactoryPublish трябва да конфигурирате плъгин Artifactory. Ето документите и ето два напълно работещи примера на многомодулни проекти на Gradle: 1 и 2, Някои акценти:
    1. Трябва да кандидатствате maven или maven-publish плъгин.
    2. Трябва да добавите произведените артефакти към configuration или publication съответно.
    3. Трябва да конфигурирате приставката с екземпляр Artifactory, с който работите, да предоставите разделителни имена и имена на хранилища, идентификационни данни (обикновено само за внедряване) и да посочите кои configuration или publication искате да публикувате.