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