Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gradle #32

Merged
merged 8 commits into from
Jun 28, 2021
Merged

Gradle #32

merged 8 commits into from
Jun 28, 2021

Conversation

ruderphilipp
Copy link
Contributor

Wie in #27 beschrieben, ist die Einstiegshürde recht hoch und kann durch die Nutzung von Gradle vereinfacht werden.

Ich habe mich von der guten Vorarbeit von @MichaelSp inspirieren lassen, jedoch basierend auf den Kommentaren in #27 einen anderen Ansatz verwendet: Alles bleibt in Github und ich habe ausschließlich die für Gradle notwendigen Dateien ergänzt. Die ANT-Skripte bleiben vorerst erhalten, wo notwendig (Gradle nutzt einen Unterordner in "build", sodass ein ./gradlew clean nicht jene Dateien löscht).

Weitere angesprochene Aktivitäten wie etwa eine Umstellung des Encodings werden hier nicht angegangen. Stattdessen habe ich die Konfigurationsdateien für IntelliJ IDEA im Toplevel-Projekt (siehe unten) ergänzt, sodass auch diese IDE korrekt eingerichtet wird.

Eine Codeentwicklung ist damit möglich. Nach Umstellung aller Teilprojekte auf Gradle werden beim Aufruf von gradle clean build test jar im Toplevel-Projekt alle Dateien kompiliert, die Tests ausgeführt und eine JAR-Datei erstellt.

ACHTUNG: Die Logik der ANT-Skripte wurde noch nicht nach Gradle übersetzt! Das bedeutet, dass die ANT-Dateien im Moment weiterhin notwendig sind, um für das Deployment signierte Fat-JARs/ ZIP-Dateien zu erzeugen.

Für das Toplevel-Projekt habe ich ein neues Repository erstellt, das die Mechanismen von git-submodule nutzt, um die anderen Repositories dynamisch einzubinden. Auch ich erhebe keine Besitzansprüche darauf und kann gern die "Ownership" transferieren.

Projekt kompiliert, die Tests laufen durch und eine Jar kann gebaut
werden. Jedoch fehlen noch ein paar Dinge, bevor ANT vollständig
ersetzt ist. Deshalb existieren weiterhin die Dateien in den Ordnern
`lib`, `lib.src`, `build`.
@willuhn
Copy link
Owner

willuhn commented Jun 4, 2021

Danke für das Patch. Ich hätte dazu noch ein paar Anmerkungen:

  • Kannst du bitte den "download" Task aus der download.gradle mit übernehmen? Den Task verwende ich derzeit, um teil-automatisiert die aktuellen Versionen der Abhängigkeiten herunterzuladen und mit denen in "lib" zu vergleichen. Ant hat ja keine Werkzeuge für die Einbindung von solchen Abhängigkeiten
  • In download.gradle sind teilweise andere Abhängigkeiten definiert. In deiner build.gradle fehlen aus meiner Sicht einige:
    • 'org.apache.xmlrpc:xmlrpc-client:+' // wird von Jameica selbst gebraucht
    • 'com.h2database:h2:+' // wird von mehreren Plugins gebraucht
    • 'commons-collections:commons-collections:3.+'
    • 'commons-logging:commons-logging:1.+'
    • compile 'com.mckoi:mckoisqldb:+' // wird u.a. von SynTAX gebraucht
    • compile 'mysql:mysql-connector-java:5.+' // wird von mehreren Plugins gebraucht
    • compile 'oro:oro:+' // Wird von Velocity gebraucht
  • bei den SWT-JARs bin ich mir nicht sicher, ob man die aus dem Maven-Repo nehmen kann. Die tragen dort komplett andere Versionsnummern (3.11*) als die, die man direkt von www.eclipse.org/swt herunterladen kann.

@ruderphilipp
Copy link
Contributor Author

Sehr gerne. Ich werde schauen, ob ich die angefragten Dinge umsetzen kann, und melde mich dann wieder hier.

@ruderphilipp
Copy link
Contributor Author

Bzgl. SWT (unterster Bulletpoint):
Auf der Seite www.eclipse.org/swt gibt es sowohl ZIP-Dateien (letzte Version: 4.19 (2021-03-03)) als auch Maven-Artefakte (letzte Version: 3.116.0 (2021-03-16)). Beide bieten jeweils einen Link je Plattform und Architektur (32/64 Bit) an.

Bei den Zip-Dateien gibt es für die Sektion "SWT Binary and Source". Hier findet man etwa 3,5MB große ZIP-Dateien. Jede enthält als Inhalt die swt.jar (~2MB) sowie den Quelltext src.zip (~1,9MB) und Lizenzinformationen. Die Sektion hat folgende Beschreibung:

These drops contain the SWT libraries and source for standalone SWT application development.

Bei den Maven-Repositories sind jeweils zwei Jar-Dateien (swt.jar 2MB und swt-src.jar 1,9MB). Zusätzlich existiert eine Abhängigkeit zu org.eclipse.platform:org.eclipse.swt:[3.116.0,4.0.0) (vgl. POM), wodurch die abhängigen Bibliotheken/Jars direkt nachgeladen werden können. Aus der Versionsangabe entnehme ich, dass die Release-Nummern "3.x.y" und "4.x.y" dafür verwendet werden, die beiden Quellen zu differenzieren und äquivalent sind. Der Text auf der Webseite bzgl. der Maven-Artefakte lautet:

SWT fragments for all the supported platforms are published to Maven Central for every release.

Ich habe die Inhalte der beiden swt.jar gegeneinander verglichen (Dateien wurden erstellt via jar tf swt.jar | sort > xyz.txt):

--- swt_maven_content.txt	2021-06-09 18:58:13.000000000 +0200
+++ swt_zip_content.txt	2021-06-09 18:57:58.000000000 +0200
@@ -1,16 +1,5 @@
-.api_description
 META-INF/
-META-INF/ECLIPSE_.RSA
-META-INF/ECLIPSE_.SF
 META-INF/MANIFEST.MF
-about.html
-about_files/
-about_files/IJG_README
-about_files/lgpl-v21.txt
-about_files/mpl-v11.txt
-about_files/mpl-v20.txt
-about_files/webkit-bsd.txt
-fragment.properties
 libswt-atk-gtk-4942r22.so
@@ -365,6 +354,7 @@
 org/eclipse/swt/internal/Converter.class
+org/eclipse/swt/internal/DPIUtil$1.class
 org/eclipse/swt/internal/DPIUtil$AutoScaleImageDataProvider.class
@@ -377,6 +367,47 @@
 org/eclipse/swt/internal/SWTMessages.properties
+org/eclipse/swt/internal/SWTMessages_ar.properties
+org/eclipse/swt/internal/SWTMessages_bg.properties
+org/eclipse/swt/internal/SWTMessages_cs.properties
+org/eclipse/swt/internal/SWTMessages_da.properties
+org/eclipse/swt/internal/SWTMessages_de.properties
+org/eclipse/swt/internal/SWTMessages_el.properties
+org/eclipse/swt/internal/SWTMessages_en_CA.properties
+org/eclipse/swt/internal/SWTMessages_es.properties
+org/eclipse/swt/internal/SWTMessages_et.properties
+org/eclipse/swt/internal/SWTMessages_eu.properties
+org/eclipse/swt/internal/SWTMessages_fa.properties
+org/eclipse/swt/internal/SWTMessages_fi.properties
+org/eclipse/swt/internal/SWTMessages_fr.properties
+org/eclipse/swt/internal/SWTMessages_hi.properties
+org/eclipse/swt/internal/SWTMessages_hu.properties
+org/eclipse/swt/internal/SWTMessages_id.properties
+org/eclipse/swt/internal/SWTMessages_it.properties
+org/eclipse/swt/internal/SWTMessages_iw.properties
+org/eclipse/swt/internal/SWTMessages_ja.properties
+org/eclipse/swt/internal/SWTMessages_ko.properties
+org/eclipse/swt/internal/SWTMessages_ku.properties
+org/eclipse/swt/internal/SWTMessages_lt.properties
+org/eclipse/swt/internal/SWTMessages_lv.properties
+org/eclipse/swt/internal/SWTMessages_ml.properties
+org/eclipse/swt/internal/SWTMessages_mn.properties
+org/eclipse/swt/internal/SWTMessages_nl.properties
+org/eclipse/swt/internal/SWTMessages_no.properties
+org/eclipse/swt/internal/SWTMessages_pl.properties
+org/eclipse/swt/internal/SWTMessages_pt.properties
+org/eclipse/swt/internal/SWTMessages_pt_BR.properties
+org/eclipse/swt/internal/SWTMessages_ro.properties
+org/eclipse/swt/internal/SWTMessages_ru.properties
+org/eclipse/swt/internal/SWTMessages_sk.properties
+org/eclipse/swt/internal/SWTMessages_sl.properties
+org/eclipse/swt/internal/SWTMessages_sr.properties
+org/eclipse/swt/internal/SWTMessages_sv.properties
+org/eclipse/swt/internal/SWTMessages_th.properties
+org/eclipse/swt/internal/SWTMessages_tr.properties
+org/eclipse/swt/internal/SWTMessages_uk.properties
+org/eclipse/swt/internal/SWTMessages_zh.properties
+org/eclipse/swt/internal/SWTMessages_zh_TW.properties
 org/eclipse/swt/internal/SessionManagerDBus$IListener.class
@@ -580,6 +611,7 @@
 org/eclipse/swt/widgets/Menu.class
+org/eclipse/swt/widgets/MenuItem$1.class
 org/eclipse/swt/widgets/MenuItem$MaskKeysym.class

Wie man sieht, fehlen in der Maven-JAR die about-Dateien und zwei Dateien im Ordner META_INF, dafür gibt es SWTMessages_XXX.properties in unterschiedlichen Sprachen, welche im ZIP fehlen. Alle anderen Dateien sind in beiden Quellen vorhanden.

Folglich würde ich in der Gradle-Konfiguration weiter auf die Quelle "Maven-Central" setzen und die Entwickler nicht zum manuellen Download der ZIP-Datei plus aller Abhängigkeiten verpflichten.

@ruderphilipp
Copy link
Contributor Author

Zum ersten und zweiten Bulletpoint

Kannst du bitte den "download" Task aus der download.gradle mit übernehmen? Den Task verwende ich derzeit, um teil-automatisiert die aktuellen Versionen der Abhängigkeiten herunterzuladen und mit denen in "lib" zu vergleichen.

In download.gradle sind teilweise andere Abhängigkeiten definiert. In deiner build.gradle fehlen aus meiner Sicht einige

Maven nutzt Konfigurationsdateien (endet auf .pom), um Abhängigkeiten zu anderen Quellen zu definieren. Gradle versteht jene Dateien und lädt (wie Maven) automatisch diese Quellen ebenfalls herunter. Das heißt, man muss jene nicht extra deklarieren.

Sollte eine neuere Version einer Abhängigkeit benötigt werden (d.h. Modul A benötigt nun Modul B mit einer anderen Versionsnummer), so wird diese neue JAR (von Modul B) bei einem Update ebenfalls automatisch nachgeladen und zentral abgelegt.

Maven nutzt für die zentrale Ablage den Ordner ~/.m2/, Gradle etwas unintuitiver ~/.gradle/caches/modules-2/files-2.1/. Bei einer Nutzung von beiden Tools, kann Gradle auch den lokalen Maven-Cache nutzen (siehe StackOverflow).

@ruderphilipp
Copy link
Contributor Author

Ich werde noch etwas Zeit investieren, um ausprobieren, wie die in ANT deklarierten Abläufe auch von Gradle aufgerufen werden können (signieren von Dateien etc.) und melde mich hier wieder.

@ruderphilipp ruderphilipp marked this pull request as draft June 9, 2021 17:40
@willuhn
Copy link
Owner

willuhn commented Jun 10, 2021

Bzgl. SWT (unterster Bulletpoint):
Auf der Seite www.eclipse.org/swt gibt es sowohl ZIP-Dateien (letzte Version: 4.19 (2021-03-03)) als auch Maven-Artefakte (letzte Version: 3.116.0 (2021-03-16)). Beide bieten jeweils einen Link je Plattform und Architektur (32/64 Bit) an.

Danke für die Recherche. OK, dann kann man die SWT-Versionen aus dem Repo ja zumindest erstmal testweise im Nightly-Build verwenden. Wobei ich schon ziemlich blöd finde, dass man bei den Versionsnummern überhaupt keine Vergleichsmöglichkeit hat. Man hätte ja statt 3.116 auch 4.19.116 verwenden können.

@willuhn
Copy link
Owner

willuhn commented Jun 10, 2021

Maven nutzt Konfigurationsdateien (endet auf .pom), um Abhängigkeiten zu anderen Quellen zu definieren. Gradle versteht jene Dateien und lädt (wie Maven) automatisch diese Quellen ebenfalls herunter. Das heißt, man muss jene nicht extra deklarieren.

Mir gings hier gar nicht um einen Vergleich Maven/Gradle. Ich meinte nur, dass das folgende Schnipsel aus der build/download.gradle mit in die build.gradle übernommen werden könnte, damit man durch Aufruf von "gradle download" sich einmal alle Deps herunterladen und im Ordner "lib/download" innerhalb des Jameica-Projektes speichern lassen kann. Derzeit mit Ant pflege ich die Abhängigkeiten in "lib" ja noch per Hand. Solange das Build-Script für die Signierung und die verschiedenen OS-Paketierungen noch nötig ist, kann ich mit "gradle download" schnell und einfach die aktuellen Abhängigkeiten lokal speichern und danach manuell prüfen, welche Libs in "lib" aktualisiert werden müssten:

task download(type: Copy) {
  into "lib/download"
  from configurations.runtime
}

@tstenner
Copy link

tstenner commented Jun 11, 2021

Für SWT gibt es ein Gradle-Plugin, das SWT für eine bestimmte Version und die betriebssystemspezifischen Pakete herunterladen kann.

dependencies {
    implementation 'a.b:x.y.z:1.2.3'
    eclipseMavenCentral {
        release '4.19.0', {
            implementation 'org.eclipse.ui.forms'
            implementation 'org.eclipse.swt'
            useNativesForRunningPlatform()
        }
    }
}

@willuhn
Copy link
Owner

willuhn commented Jun 11, 2021

Danke für den Hinweis. Aber das ist dann die Version für die Plattform, auf der Build-Script gerade läuft. Das Script sollte ja aber in der Lage sein, Releases für jede Plattform zu erzeugen.

@tstenner
Copy link

Die Dokumentation ist leider nicht die beste, aber an sich ist das möglich. Für die Entwicklung an sich ist es ganz angenehm, für die Releases könnte man das useNativesForRunningPlatform() rausnehmen und gradle 3x aufrufen (gradle distZip -Dosgi.platform=gtk.linux.x86_64 etc.).

@ruderphilipp
Copy link
Contributor Author

Vielen Dank für den Tipp, @tstenner! Ich habe mir den Quelltext von dem Plugin angeschaut und es verweist stets hardcoded auf currentOs. Es gibt leider keine Methode, die man nutzen könnte, um per Angabe des Betriebssystems und der Architektur die entsprechenden JARs herunterzuladen. Somit könnte man es nur nutzen, um die Versionnummer in die Buildnummer übersetzen zu lassen...

Deswegen habe ich mich nochmal daran versucht, den download-Task "naiv" zu anzugehen:

  • Zuerst benötigt man alle Permutationen aus OS und ARCH.
  • Diese zu den bestehenden Dependencies ergänzen.
  • Gesamtmenge als JARs kopieren lassen.

Das hätte den Vorteil, dass man in der build.gradle weiter Abhängigkeiten deklarieren kann und ausschließlich beim download-Task die plattformabhängigen Eclipse-Abhängigkeiten ergänzt werden.

Nach etwas Recherche habe ich in Groovy hinbekommen, dass eine Liste mit allen Permutationen erzeugt wird. Was ich in der Dokumentation von Gradle jedoch noch nicht verstehe, ist wie man programmatisch die Abhängigkeiten ergänzt. In https://stackoverflow.com/a/55160963 steht ein triviales project.getDependencies().add('compile', project(':common-configuration')), jedoch handelt es sich ja hier um implementation "x:y:v", weshalb project() nicht funktioniert... Jedoch ist mir noch nicht klar, welche Methode stattdessen genutzt werden muss.

@MichaelSp
Copy link

Man könnte auch mit Github Actions die Pakete nativ auf dem jeweiligen OS direkt bauen.

@willuhn
Copy link
Owner

willuhn commented Jun 17, 2021

Aber bei Github Actions läuft der Buildprozess doch auf einem Server von Github. Dann lassen sich die Builds nicht mehr signieren.

@MichaelSp
Copy link

@willuhn Doch, du kannst die Keys für das Signieren hinterlegen: https://docs.github.com/en/actions/reference/encrypted-secrets

@willuhn
Copy link
Owner

willuhn commented Jun 17, 2021

Also ich möchte eigentlich keine Private-Keys auf einen Server hochladen. Da muss ich ja drauf vertrauen, dass alles mit rechten Dingen zugeht. Kontrollieren kann ich es nicht mehr. meine persönlichen Anforderungen an die Vertrauenswürdigkeit einer solchen Signatur erfüllt das jedenfalls nicht. Ich erstelle die Releases bisher ausschliesslich lokal auf meinem Rechner.

@MichaelSp
Copy link

ok, kann ich verstehen. Wem auch immer man vertraut/misstraut 🤷
Nur zum drüber nachdenken: Wenn du Github nicht vertraust, glaubst du du bekommst bei nem clone, das 1:1 was du auch gepusht hast?

@willuhn
Copy link
Owner

willuhn commented Jun 17, 2021

Ich baue die Releases auf dem Rechner und direkt auf dem Code (also nicht auf einem dedizierten Clone), auf dem ich auch entwickle. Da gibt es quasi kein clone oder pull. Sondern meine eigenen Commits. Und wenn mal jemand einen PR einreicht, dann schaue ich mir die Diffs sehr genau an, bevor sie lokal in meinem Code landen.

Es geht um eine Banking-Anwendung. Das finde ich schon ein sehr sensibles Thema, da man echten finanziellen Schaden auslösen kann. Daher versuche ich jedes Risiko zu vermeiden, soweit ich Kontrolle darüber habe.

@tstenner
Copy link

Man könnte auch mit Github Actions die Pakete nativ auf dem jeweiligen OS direkt bauen.

An sich schon, die Pakete sind aber bis auf die plattformabhängigen SWT-jars identisch. So wirklich not tut das also nicht.

Aber bei Github Actions läuft der Buildprozess doch auf einem Server von Github. Dann lassen sich die Builds nicht mehr signieren.

Nur interessehalber: kann man die fertig gebauten Pakete herunterladen und dann lokal signieren? Hätte immer noch das Problem, dass man dem Buildserver vertrauen muss, aber der Schlüssel landet nicht irgendwo.

Für nicht-signierte Builds (und um die Unit tests für PRs durchlaufen zu lassen) fände ich Github Actions trotzdem praktisch.

Nur zum drüber nachdenken: Wenn du Github nicht vertraust, glaubst du du bekommst bei nem clone, das 1:1 was du auch gepusht hast?

Ja. Das Repository ist zwar bei Github hinterlegt, aber kleinste Änderungen würden zwangsläufig dazu führen, dass die Checksummen (d.h. die ID von jedem Commit) abweicht. Zusätzlich hat man die Github-Server auch schon in der .ssh/known_hosts, sodass man nicht einfach mit dem DNS rumspielen kann um die Verbindung zu einem anderen Server umzuleiten.

@willuhn
Copy link
Owner

willuhn commented Jun 17, 2021

An sich schon, die Pakete sind aber bis auf die plattformabhängigen SWT-jars identisch. So wirklich not tut das also nicht.

Das ist korrekt. Man muss nicht auf der Zielplattform bauen.

Nur interessehalber: kann man die fertig gebauten Pakete herunterladen und dann lokal signieren? Hätte immer noch das Problem, dass man dem Buildserver vertrauen muss, aber der Schlüssel landet nicht irgendwo.

Zumindest für die Signatur der ZIP-Dateien würde das gehen. Wobei da schon meine Paranoia ansetzt, weil ich dann nicht mehr garantieren kann, dass ich wirklich genau dieses Build signiere oder die Datei zwischen Build und Download manipuliert wurde. Wenn ich es komplett lokal per Ant baue, wird unmittelbar nach der Erstellung der ZIP-Datei direkt die Signatur erzeugt.

Unabhängig davon sind auch direkt die Klassen von Jameica und Hibiscus signiert. Das muss unmittelbar nach der Erstellung der JARs und noch vor dem Erstellen der ZIP-Dateien passieren, da die Signaturen der Klassen im "manifest"-Ordner innerhalb des JAR landen. Hierfür wird ein Java-Keystore benötigt, der nur lokal auf meinem Rechner existiert.

Für nicht-signierte Builds (und um die Unit tests für PRs durchlaufen zu lassen) fände ich Github Actions trotzdem praktisch.

Das stimmt. Damit könnte man auch die Nightly-Builds erzeugen. Derzeit werden die auf meinem Server täglich als Cronjob erzeugt. Da das automatisiert passiert, haben die gezwungenermaßen auch keine Signaturen.

@ruderphilipp
Copy link
Contributor Author

Ich habe nun mit ruderphilipp/jmc@5823ed7 einen Gradle-Task geschrieben, der die SWT-Jar-Dateien für alle Plattformen herunterlädt.

Als Ersatz für den alten Download-Task könnte für Jameica das Kommando gradle distZip (siehe Gradle Doku) verwendet werden, da es das Plugin java-application verwendet. Allerdings sind dann alle Jar-Dateien flach in einer ZIP/TAR-Datei. Außerdem funktioniert das nicht für die anderen Projekte, die ja Bibliotheken/Plugins (und keine Applikation) darstellen. Deswegen gibt es mit ruderphilipp/jmc@2bfcad1 einen neuen Task collectTargetAll. Dieser ist integriert in den regulären build-Task von Gradle, sodass man nix extra aufrufen muss. In diesem Task(s) werden unter build/target sowohl die projektspezifische JAR als auch alle deklarierten Abhängigkeiten des Projekts gesammelt. Auch das Aufräumen des Ordners ist in den regulären clean-Task eingebunden, sodass keine Altlasten übrig bleiben.

Über zentrale Module (siehe ruderphilipp/jmc@d53adf0) im Sinne von DRY sind Ordnerstruktur oder Encoding einmalig definiert und als Einzeiler nutzbar. Dadurch fällt die jeweilige Konfiguration in der build.gradle je Projekt nun relativ schlank aus und konzentriert sich ausschließlich auf die projektspezifischen Aspekte.

ACHTUNG: Die Logik der ANT-Skripte wurde noch nicht vollständig nach Gradle übersetzt! Die ANT-Dateien sind im Moment weiterhin notwendig, um für das Deployment signierte Fat-JARs/ ZIP-Dateien zu erzeugen.

Die Themen "Signieren" sowie "Ausliefern" mit Gradle sind noch offen. Es gibt Plugins für Packen, Signieren und auch welche, um z.B. direkt danach die JAR zu Maven-Central hochzuladen. Ebenso das von @tstenner aufgeworfene Thema "Github Actions" ist noch offen/ unter Diskussion, da ich noch nicht herausgefunden habe, wie soetwas mit einem Gradle-Multiproject-Build über mehrere Repositories realisierbar wäre.

Bei Vorschlägen diesbezüglich bin ich aber gern bereit, zu unterstützen. Dafür wäre dann ein neuer Pull-Request (wahrscheinlich gegen https://github.com/ruderphilipp/jmc, da zentral zu konfigurieren) notwendig. Jedoch möchte ich diese drei Themen HIER gern aus dem Scope ausklammern und somit das Thema "Gradle" abschließen wollen, da ich mich wieder der Arbeit an Verbesserungs- und Erweiterungsvorschlägen am Code zuwenden möchte.

@ruderphilipp ruderphilipp marked this pull request as ready for review June 27, 2021 12:18
@willuhn
Copy link
Owner

willuhn commented Jun 28, 2021

Kannst du das Löschen der download.gradle bitte noch aus dem Commit rausnehmen? Ich möchte das gern noch verwenden, solange der Build-Prozess noch nicht komplett auf Gradle umgestellt ist.

@willuhn
Copy link
Owner

willuhn commented Jun 28, 2021

Danke

@willuhn willuhn merged commit a555b4c into willuhn:master Jun 28, 2021
@ruderphilipp
Copy link
Contributor Author

Hallo @willuhn,
ich habe mit a3dc345 die Datei download.gradle wiederhergestellt. Ich habe anscheinend etwas übersehen, denn dabei sind die Tabs zu Leerzeichen konvertiert worden, weshalb die Datei trotzdem als verändert angezeigt wird.

Zusätzlich kannst Du auch das Kommando ./gradlew collectTargetAll ausführen, um jeweils alle Abhängigkeiten im Ordner ./build/target/dependencies/ zu sammeln (siehe ruderphilipp/jmc@2bfcad1). Ich habe versucht, hier nicht mit den bestehenden Strukturen zu interagieren, um die ANT-Logik nicht durcheinander zu bringen.

@willuhn
Copy link
Owner

willuhn commented Jun 28, 2021

Wie wollen wir jetzt weiter verfahren? Zum Bauen ist ja jetzt das übergeordnete Meta-Projekt notwendig.

@ruderphilipp
Copy link
Contributor Author

Wie wollen wir jetzt weiter verfahren? Zum Bauen ist ja jetzt das übergeordnete Meta-Projekt notwendig.

Ich werde im Projekt JMC die Repositories auf die Originale umlenken. Aktuell zeigen sie noch auf meine Forks, da ja überall die Gradle-Umstellung einige Anpassungen notwendig gemacht hat.

Anschließend muss nur einmal das Projekt als Basis ausgecheckt werden. Innerhalb der Unterordner kann man ganz regulär die Branches wechseln, Änderungen pushen usw.

@willuhn
Copy link
Owner

willuhn commented Jun 28, 2021

Zusätzlich kannst Du auch das Kommando ./gradlew collectTargetAll ausführen, um jeweils alle Abhängigkeiten im Ordner ./build/target/dependencies/ zu sammeln

Also wenn der Aufruf genau das selbe macht wie mein Code in download.gradle, dann kann meine download.gradle doch gelöscht werden ;)

@ruderphilipp ruderphilipp deleted the gradle branch July 4, 2021 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants