2016-12-12 2 views
8

Ich habe Gradle vor einigen Monaten begonnen und stoße manchmal auf ein Problem mit meinen build.gradle Dateien. Zum Beispiel, wenn ich so etwas zu meiner Datei hinzufügen:Gibt es so etwas wie die effektive Pom (Maven) in Gradle?

Ich kann nicht sagen, was das zu erweitern. In meinem Fall habe ich herausgefunden, dass es auch das java Plugin einzieht und das java Plugin selbst einige Einstellungen vornimmt. Woher weiß ich, worauf sich diese Aussagen ausdehnen? Hat Gradle etwas wie eine effektive build.gradle?

Klarstellung:, was ich will wirklich wissen, ist, was jeder apply plugin X Aussage hinter den Kulissen tut, ohne Dokumentationen aufzublicken usw.

+0

Definieren Sie, was Sie genau mit "expand to" meinen. Ich habe gradle schon seit vielen Jahren Gradle benutzt und auch viele Gradle Plugins selbst entwickelt. Was bei Gradle-Plugins wichtig ist, ist, dass es sich im Wesentlichen nur um vorgefertigten groovigen Code handelt, der von der apply-Anweisung ausgeführt wird. Gradle Plugins können ziemlich viel tun, was du in Groovy machen kannst, was sie so mächtig macht. Sie konfigurieren das Projekt auf jede Art und Weise, so dass Sie es nicht manuell in Ihrem Build.Gradle tun müssen. –

+0

Zum Beispiel könnten Sie den Quellcode eines Gradle Plugins nehmen und direkt in Ihr build.gradle schreiben und es würde genauso funktionieren. –

+0

Im Gegensatz zu maven ist Gradle nicht so sehr darum bemüht, Einstellungen und Plugins aufzulisten und zu konfigurieren, aber ähnlich wie Grunt oder Gulp (ich weiß nicht, ob Sie mit diesen Javascript-Build-Systemen vertraut sind) schreiben Sie Code, der zur Kompilierzeit ausgeführt wird Baue dein Projekt auf. Ich bin mit Kotlin nicht so vertraut, aber ist es möglich, dass Kotlin-Code zu Java-Jar-Dateien kompiliert? In diesem Fall wird das Java-Plugin verwendet, damit das Kotlin-Plugin Java-Byte-Code generieren kann.Es würde zusätzliche Aufgaben vor der Java-Kompilieraufgabe hinzufügen, um den Kotlin-Code auf eine Weise vorzubereiten, die das Java-Plugin verstehen kann. –

Antwort

0

Gradle Plugins, während sie in Form von gradle Skripte existieren kann, sehr viele von ihnen sind binäre Plugins: Java-Code, der zufällig von der jvm zur Build-Zeit ausgeführt wird. Dies bedeutet, dass "build.gradle" das effektive build.gradle ist, es sei denn, Sie möchten wirklich den Bytecode/Plugin-Quellcode betrachten.

Der beste Weg, um zu wissen, was ein Plugin in Ihr Projekt bringt, ist read the documentation, oder wenn es nicht genügend Dokumentation gibt, versuchen Sie, die Kotlin Entwickler/ein Kotlin spezifischen Support-Forum zu erreichen.

Edit als Antwort auf die Klarstellung: Nein, es gibt keine Möglichkeit zu wissen, was ein Plugin tut, ohne sich die Dokumentation anzusehen; Plugins sind häufig Groovy/Java-Programme, die mit Ihrem Build ausgeführt werden. Es wäre so, als würde man den Computer fragen, was "xyz.exe" macht, ohne zu googlen oder zu laufen.

Die Auswahl von Gradle-Plugins ist eine sehr große und bewusste Wahl für Ihren Build-Prozess. Sie muss sorgfältig durchgeführt werden und in Betracht ziehen, welche Funktionen sie verwenden und welche Einstellungen für jedes Plugin verwendet werden, um sicherzustellen, dass Ihr Build Ergebnisse liefert brauchen. Selbst wenn wir SciFi-Computer hätten, die magisch sagen könnten, was eine zufällige Binärdatei in einfachem Englisch macht, wäre es besser, wenn Sie Ihre Arbeit erledigen, die Dokumente lesen und herausfinden, wie Ihre Plugins funktionieren und wie Sie Ihre Plugins effektiv einsetzen .

+0

Kotlin war nur ein Beispiel. Ich weiß nicht, was das Java-Plugin auch tut. –

+0

Das bringt mich zu meinem zweiten Absatz: Die Java-Plugin-Dokumentation lebt [hier] (https://docs.gradle.org/current/userguide/java_plugin.html), wenn Sie Details benötigen, um es zusammenzufassen, fügt sie eine Menge Java hinzu Lifecycle-Aufgaben (und unter der Haube, alles, Skript oder Binär, benötigt für diese Aufgaben zu funktionieren). –

1

Sie könnten wahrscheinlich die Plugins mit einem benutzerdefinierten Aufgabenliste

task pluginReport { 
    doLast { 
     allprojects.each { Project p -> 
      PluginContainer plugins = p.plugins 
      println "Project: ${p.name} has ${plugins.size()} plugins 
      plugins.each { Plugin plugin -> 
       println " - ${plugin.class.name}" 
      } 
     } 
    } 
} 
Verwandte Themen