2017-11-08 3 views
0

curently Ich schreibe ein Gradle-Plugin, und ich muss eine Maven Abhängigkeit programmatisch in einer bestimmten Aufgabe hinzufügen und herunterladen.Gradle Plugin Download-Abhängigkeit programmgesteuert

I ausgewertet DependencyHandler und ArtifactResolutionQuery aber ich kann nicht herausfinden, wo und wie eine Abhängigkeit hinzuzufügen und lösen es in mavenCentral Repository

für Maven Similarcoding sieht ziemlich einfach

Artifact artifact = artifactFactory.createArtifactWithClassifier(groupId, artifactId, version, type, classifier); 

    artifactResolver.resolve(artifact, remoteRepositories, localRepository); 

Also ich denke,/Hoffnung gibt es eine ähnlich einfache Weise in gradle und ich bin es einfach nicht

Grüße Mathias

sehen

Update 1:

Also hier ist ein paar der Sachen, die ich versuchte, wild c & p aus verschiedenen Versuchen. lohnt es sich, zu sagen, dass die Abhängigkeit ich den Klassifikator ZIP herunterladen möchten hat, so normal in meinem build.gradle ich schreibe

compile 'group:artifact:[email protected]

 ComponentIdentifier componentIdentifier = new DefaultModuleComponentIdentifier("com.sap.cloud", 
       "neo-java-web-sdk", "3.39.10"); 

     System.out.println("CompIdentifier = " + componentIdentifier.getDisplayName()); 
     //getProject().getDependencies().add("compile", componentIdentifier.getDisplayName()); 



     Configuration configuration = getProject().getConfigurations().getByName("compile"); 
     org.gradle.api.artifacts.Dependency dep2 = new DefaultExternalModuleDependency("com.sap.cloud", 
       "neo-java-web-sdk", "3.39.10"); 

     boolean depList = configuration.getDependencies().add(dep2); 
//   
     configuration.forEach(file -> { 
      getProject().getLogger().lifecycle("Found project dependency @ " + file.getAbsolutePath()); 
     }); 
     Set<File> files = configuration.resolve(); 
     for (File file2 : files) { 
      System.out.println("Files: " + file2.getName()); 
     } 

     DependencyHandler dep = getProject().getDependencies(); 
     ComponentModuleMetadataHandler modules = dep.getModules(); 

     ArtifactResolutionQuery a = getProject().getDependencies().createArtifactResolutionQuery() 
       .forComponents(componentIdentifier).withArtifacts(MavenModule.class, SourcesArtifact.class); 
     ArtifactResolutionResult r = a.execute(); 
     Set<ComponentArtifactsResult> set = r.getResolvedComponents(); 
     Set<ComponentResult> c = r.getComponents(); 
+0

Wie wäre es mit dem Beispiel für die ['ArtifactResolutionQuery'] (https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.query.ArtifactResolutionQuery.html)? –

+0

@ lu.koerfer meine Frage aktualisiert. –

Antwort

0

Ich denke, der einfachste Weg, um die Datei zu erhalten Eine Abhängigkeit programmgesteuert in einem Gradle-Plugin herunterzuladen, ist dasselbe wie in einem Build-Skript. Erstellen Sie einfach eine neue Konfiguration, fügen Sie Ihre Abhängigkeit hinzu und lösen Sie die Konfiguration auf. Sehen Sie sich das folgende Beispiel, wie das funktioniert in Java (die bevorzugte Sprache für Gradle Plugins):

Configuration config = project.getConfigurations().create("download"); 
config.setTransitive(false); // if required 
project.getDependencies().add(config.getName(), "com.sap.cloud:neo-java-web-sdk:[email protected]"); 
File file = config.getSingleFile(); 

in diesem Beispiel der Name der Konfiguration ("download") als Konfigurationsname beliebige Zeichenfolge nicht bereits verwendet werden (wie compile oder runtime). Da die Konfiguration anschließend aufgelöst wird, müssen Sie immer einen anderen Namen verwenden, wenn Sie dieses Code-Snippet wiederverwenden (oder wenn Sie es mehrmals aufrufen).

+0

Vielen Dank Ich werde es morgen ausprobieren. Was genau macht die Linie (Download)? –

+0

Es erstellt eine neue Konfiguration mit dem Namen 'download'. Wie ich in der Antwort zu erklären versuchte, können Sie es einfach auf etwas anderes ändern. –

+0

Schöne Lösung, vielen Dank! –