2017-04-04 10 views
0

Ich habe eine Frage zu Gradle Builds, die ich habe Schwierigkeiten bei der Auflösung.Problem mit Gradle Build und Pom Parsing

Ich halte einen Fehler bekommen AKTUALISIERT Spruch:

> Could not resolve credit/open/fabric:credit-open-fabric-api:17.4.1.RELEASE. 
    > Could not parse POM http://Mywebsite/content/groups/public/openapi/17.4.1.RELEASE/open-api-17.4.1.RELEASE.pom 
    > Could not resolve open:api:17.4.1.RELEASE. 
     > Could not resolve open:api2:17.4.1.RELEASE. 
      > Could not parse POM http://Mywebsite/content/groups/public/open/api2/17.4.1.RELEASE/api2-17.4.1.RELEASE.pom 
       > Could not resolve open:open-parent:17.4.1.RELEASE. 
       > Could not resolve open:open-parent:17.4.1.RELEASE. 
        > Could not parse POM http://Mywebsite/content/groups/public/open/open-parent/17.4.1.RELEASE/open-parent-17.4.1.RELEASE.pom 
         > Unable to resolve version for dependency 'tibco:${tibrv.native}:jar' 

und die Stack-Trace zeigt, dass es ein Problem, ein pom in Parsen, die die Abhängigkeit enthält als AKTUALISIERT folgt:

<dependency> 
<groupID>tibco</groupID> 
<artifactId>${tibrv.native}</artifactID> 
</dependency> 

<dependency> 
<groupID>tibco</groupID> 
<artifactId>tibask</artifactID> 
</dependency> 
. 
. 
. 
<profile> 
<id>tib-windows</id> 
<activation> 
    <os> 
    <family>windows</family> 
    </os> 
</activation> 
<properties> 
    <tibrv.native>tibask</tibrv.native> 
</properties> 
</profile> 

In meinem build .gradle Datei Ich habe:

compile 'tibco:ask:8.3.1' 

Wo Krippe die ArtefaktID in meinem POM ist.

Gibt es etwas, das ich in meiner build.gradle-Datei für den Pom-Parser innerhalb von Gradle hinzufügen muss, um einen echten Wert für den Wert ${tibrv.native} zu erhalten?

+0

Bitte fügen Sie den entsprechenden Abschnitt von 'pom.xml', die die' tibrv.native' Eigenschaft definiert. Hoffentlich ist es nicht innerhalb eines

+0

Das ist genau das, was es ist ... – koala421

+0

Siehe [hier] (https://blog.gradle.org/maven-pom-profiles) für die Diskussion über Maven-Profil-Unterstützung in Großbuchstaben. Und [hier] (https://dzone.com/articles/maven-profile-best-practices), warum die Verwendung von Profilen im Abhängigkeitsmanagement als ein Anti-Muster betrachtet wird. –

Antwort

0

Wie bereits erwähnt here die <os> Profilaktivierung nicht

unterstützt wird

Es ist möglich, dass Sie die tibrv.native System Eigenschaft könnte, ich bin wirklich nicht sicher, aber es ist einen Versuch wert.

Eine mögliche Problemumgehung besteht darin, eine "feste" Version von nativity-8.3.1.pom in einem anderen Repository zu speichern, das vor dem Haupt-Repository angeordnet ist. Maven-Repositories können aus einem lokalen Ordner bezogen werden und ich denke, dass Gradle in der Lage ist, die Artefakte einer einzelnen Abhängigkeit von mehreren Repositories zu beziehen (zB Pom von einem Repo und Jar von einem anderen), aber nicht 100% sicher.

zB:

repositories { 
    maven { 
     url uri('localrepo') // gradle will look here first 
    } 
    maven { 
     url 'http://Mywebsite/content/groups/public' 
    } 
} 

Sie könnten dann speichern Sie eine feste Version des pom xml bei

$projectDir/localrepo/tibco/nativity/8.3.1/nativity-8.3.1.pom 
+0

Gibt es eine Möglichkeit für gradle in den Repository-Speicherort zu schauen und die Pom-Datei zu ignorieren, die sich hier befindet und nur das jar darin verwendet Lokalität? – koala421

+0

Ich denke schon, sehe meine andere Antwort –

0

Eine andere mögliche Lösung (nicht sicher, es wird funktionieren) ist eine Konfiguration mit transitive = false verwenden . Hoffentlich versucht Gradle in diesem Fall nicht, die transitiven Abhängigkeiten aufzulösen. Natürlich müssen Sie die transitiven Abhängigkeiten manuell hinzufügen. Dadurch gehen die Meta-Daten für Gruppe/Artefakt/Version verloren, so dass diese Abhängigkeit nicht in der Lage ist, an der Abhängigkeitsauflösung teilzunehmen, wenn ein Benutzer auf Ihr Projekt verweist.

Eg

configurations { 
    hack { transitive = false} 
} 
dependencies { 
    hack 'tibco:nativity:8.3.1' 
    compile configurations.hack.singleFile 
    compile 'foo:bar:1.0' 
} 
+0

Das Problem, das ich konfrontiert ist, ist die Pom-Datei wird gelesen und Gradle findet nicht das Glas tibco: $ tibrv.native}: jar innerhalb der Repo-Speicherort (es sollte nicht, weil es existiert nicht) ..Prinzipiell analysiert Gradle den Pom nicht richtig – koala421

+0

Ich hatte gehofft, dass 'transitive = false' bedeutet, dass die Abhängigkeiten im Pom ignoriert wurden. Schätze ich habe mich geirrt :( –