2017-12-20 1 views
0

Ich versuche, eine gradle.build Datei einzurichten und ich mit der folgenden transitiven Abhängigkeit ein Problem habe:Wie kann Gradle die transitive Abhängigkeit mit falschen Metadaten richtig herunterziehen?

org.glassfish.ha:ha-api:3.1.8.

Es scheint, dass pom.xml angibt, dass die Binärdatei im "hk2-jar" -Format ist, was in der Tat falsch ist, da die Binärdatei einfach im "jar" -Format ist. Nach ein wenig Forschung tun, stieß ich auf die folgenden:

How should gradle handle “hk2-jar” dependencies?

Leider ist dies nicht zu funktionieren schien. Lesen ein wenig mehr durch die Dokumentation fand ich, ich sollte einfach in der Lage sein, etwas zu tun, wie so:

configurations.all { 
    resolutionStrategy.force 'org.glassfish.ha:ha-api:[email protected]' 
} 

Diese ähnlich falsche Ergebnisse produziert:

Attempts to pull from the wrong URL

Wie Sie sehen können, es versucht, zieht tatsächlich die folgende URL herunter:

http://repo-url/org/glassfish/ha/[email protected]/[email protected]

Hat jemand eine Ahnung, wie Ich kann richtig die richtige Binärdatei ziehen und die falsche Abhängigkeit ausschließen?

Danke!

EDIT

Ich wollte nur hinzufügen, dass die ursprüngliche Frage, die ich begegnete, ist die Tatsache, dass, wenn Gradle die ha-api Abhängigkeit von unserer internen Artifactory zum Download versucht, 403 zurückgeführt wird als die hk2-JAR-Datei tut nicht in unserem Repository vorhanden ist (nur, dass das Glas):

* What went wrong: 
Could not resolve all dependencies for configuration ':compileClasspath'. 
> Could not determine artifacts for org.glassfish.ha:ha-api:3.1.8 
    > Could not get resource 'http://repo-url/artifactory/libs-release/org/glassfish/ha/ha-api/3.1.8/ha-api-3.1.8.hk2-jar'. 
     > Could not HEAD 'http://repo-url/artifactory/libs-release/org/glassfish/ha/ha-api/3.1.8/ha-api-3.1.8.hk2-jar'. Received status code 403 from server: Forbidden 
+0

@ tkruse, ich habe das Original-Problem enthalten. – slashp

Antwort

0

Dies scheint ein Problem vor allem, wenn Artifactory (nicht maven zentraler/jcenter), aus irgendeinem Grunde.

Lösung beschrieben bei Gradle forums

Für die Abhängigkeit in einem Projekt mit:

configurations.all { 
    resolutionStrategy.dependencySubstitution { 
     all { DependencySubstitution dependency -> 
     def requested = dependency.requested 
     if (requested instanceof ModuleComponentSelector && requested.group == 'org.glassfish.ha' && requested.name == 'ha-api') { 
      dependency.useTarget "org.glassfish.ha:ha-ap:${requested.version}@jar" 
     } 
     } 
    } 
} 

Für die transitive Abhängigkeit in Bibliotheksprojekten zu ändern (so andere Projekte je nicht die oben genannten zu tun haben):

publications { 
    foo(MavenPublication) { 
     pom.withXml { 
      def dependency = asNode().dependencies.dependency.find { 
       it.groupId.text() == 'org.glassfish.ha' && it.artifactId.text() == 'ha-api') 
      } 
      dependency.appendNode('type', 'jar')  
     } 
    } 
} 

Es könnte sich lohnen zu prüfen, ob dies auch in Artifactory möglich ist.

Verwandte Themen