# Maven vs Gradle



## sascha-sphw (1. Okt 2019)

Aus reiner Neugier!


----------



## mihe7 (1. Okt 2019)

Und was ist nun die Frage?


----------



## Xyz1 (1. Okt 2019)

Just another voting site.


----------



## sascha-sphw (1. Okt 2019)

mihe7 hat gesagt.:


> Und was ist nun die Frage?


Sorry, dachte das wäre klar.

Was ist euer Favorite.


----------



## Xyz1 (1. Okt 2019)

sascha-sphw hat gesagt.:


> Was ist euer Favorite


Ja aber hinsichtlich welcher Aspekte?


----------



## sascha-sphw (1. Okt 2019)

Tobias-nrw hat gesagt.:


> Ja aber hinsichtlich welcher Aspekte?


Generell, was nimmst Du am ehesten wenn Du ein Projekt aufsetzt. Somit würde ich Dich bei "weder noch" einreihen.


----------



## mrBrown (1. Okt 2019)

sascha-sphw hat gesagt.:


> Generell, was nimmst Du am ehesten wenn Du ein Projekt aufsetzt. Somit würde ich Dich bei "weder noch" einreihen.


Kannst du die Frage noch editieren und "weder noch" durch "kein Buildsystem/IDE" und "anderes" ersetzen?


----------



## Xyz1 (1. Okt 2019)

sascha-sphw hat gesagt.:


> Generell, was nimmst Du am ehesten wenn Du ein Projekt aufsetzt. Somit würde ich Dich bei "weder noch" einreihen


Mir ist wurscht, wo Du mich "einreihen würdest". Stelle eine vernünftige Frage - oder Du bekommst keine Antwort. So einfach ist das.


----------



## sascha-sphw (1. Okt 2019)

mrBrown hat gesagt.:


> Kannst du die Frage noch editieren und "weder noch" durch "kein Buildsystem/IDE" und "anderes" ersetzen?


Leider nein, oder ich finde den Editieren Button nicht.


----------



## mrBrown (1. Okt 2019)

sascha-sphw hat gesagt.:


> Leider nein, oder ich finde den Editieren Button nicht.


oh, das ist die Sperre nach 30min, ich war mal so frei und habs angepasst


----------



## mrBrown (1. Okt 2019)

Tobias-nrw hat gesagt.:


> Mir ist wurscht, wo Du mich "einreihen würdest". Stelle eine vernünftige Frage - oder Du bekommst keine Antwort. So einfach ist das.


Welches Buildsystem bevorzugst du für neue Projekte?  Eigentlich eine ziemlich einfache Frage


----------



## MoxxiManagarm (1. Okt 2019)

Eigentlich bräuchte ich zwei Stimmen. Für kleine Projekte ist Maven einfacher. Ich fühle mich aber für spezielle Aufgaben mit Gradle etwas flexibler. Diese speziellen Aufgaben treten bei größeren Projekten sehr schnell auf. Da ich eher mit größeren Projekten zu tun habe, habe ich für Gradle gevoted.


----------



## mrBrown (1. Okt 2019)

MoxxiManagarm hat gesagt.:


> Ich fühle mich aber für spezielle Aufgaben mit Gradle etwas flexibler. Diese speziellen Aufgaben treten bei größeren Projekten sehr schnell auf.


Welche Dinge denn zB?

Bisher klappte zumindest bei mir alles noch mit passenden Maven-Plugins, und genau diese Flexibilität ist das, was mich bei Gradle „stört“


----------



## mihe7 (1. Okt 2019)

MoxxiManagarm hat gesagt.:


> habe ich für Gradle gevoted.


Verräterin!


----------



## MoxxiManagarm (1. Okt 2019)

mrBrown hat gesagt.:


> und genau diese Flexibilität ist das, was mich bei Gradle „stört“


Das ist wie Autofahren mit Automatic und Kupplung. Ich fahre auch lieber Kupplung



mrBrown hat gesagt.:


> Bisher klappte zumindest bei mir alles noch mit passenden Maven-Plugins


Kann sein, aber nichts jeder will sich unzählige Plugins laden



mrBrown hat gesagt.:


> Welche Dinge denn zB?


Sich verzweigende Prozessschritte. Wenn du z.B. 2 Builds hast für 32bit und 64 bit, dann haben beide Builds möglicherweise gleiche Steps, aber auch verschiedene. Das gleiche gilt für verschiedene Betriebssysteme. Ich persönlich mag auch die Syntax vn Gradle lieber, xml wird bei großen Projekten sehr schnell extrem unübersichtlich.


----------



## MoxxiManagarm (1. Okt 2019)

mihe7 hat gesagt.:


> Verräterin!


Garnicht ;-) Wenn es um Dependencies und solche Dinge geht bin ich voll bei euch.


----------



## mrBrown (1. Okt 2019)

MoxxiManagarm hat gesagt.:


> Das ist wie Autofahren mit Automatic und Kupplung. Ich fahre auch lieber Kupplung


Die baut dir beim schalten auch immerhin meine Heckspoiler an und wechselt die Reifen 



MoxxiManagarm hat gesagt.:


> Ich persönlich mag auch die Syntax vn Gradle lieber, xml wird bei großen Projekten sehr schnell extrem unübersichtlich.


https://github.com/takari/polyglot-maven 

Keine Ahnung wie das in anderen IDEs ist, bee zumindest in IntelliJ ist die Autovervollständigung für Gradle echt grottig schlecht, das klappt mit maven deutlich besser, wo man im Zweifel auf mit einem Klick Schema & Doku offen hat



MoxxiManagarm hat gesagt.:


> Sich verzweigende Prozessschritte. Wenn du z.B. 2 Builds hast für 32bit und 64 bit, dann haben beide Builds möglicherweise gleiche Steps, aber auch verschiedene. Das gleiche gilt für verschiedene Betriebssysteme.


Stimmt, dass klappt da wirklich einfacher, mit Maven würde man das vermutlich mit mehreren Modulen lösen


----------



## thecain (1. Okt 2019)

Oder mit Profilen müsste das eigtl auch gehen meine ich.
Ich bin bei der maven Fraktion. Habe das früher gelernt und nie Vorteile bei gradle gefunden, welche mich zum Wechseln überzeugt hätten.


----------



## mrBrown (1. Okt 2019)

thecain hat gesagt.:


> Oder mit Profilen müsste das eigtl auch gehen meine ich.


Bräuchte dann aber zwei getrennte Builds, bei Gradle müsste das auch in einem möglich sein.


----------



## Der Wissende (1. Okt 2019)

Bei mir ist es ganz klar gradle. So lange man nichts komplexeres macht, dann ist maven okay. Klar kann man alles mit Plugins machen, aber schon alleine für einfache Sachen wie einen extra source Ordner anzugeben braucht man ein Plugin und dann braucht es diesen Code

```
<build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>some directory</source>
                ...
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
```

Bei gradle ist sowas schon eingebaut, direkt von den Machern 


```
sourceSets {     
   main {     
    java {            
       srcDirs 'src'       
    }   
  }  
}
```

Mal davon abgesehen, dass ich den Code deutlich lesbarer finde, mach ich mich nicht abhängig von jemandem drittes für sowas einfaches. Das Plugin hatte 2017 sein letztes Update, keine Ahnung, ob jemand das noch maintaint, falls es eine neue maven Version gibt und das plugin dann inkompatibel wird. 

Anderes Beispiel, zum kopieren von Dateien gilt als best practices das Ant Plugin einzubinden und dann mit ant zu kopieren. 

Was mir auch nicht so gefällt, ist das lifecycle Konzept. Man gibt an in welcher Phase ein Plugin ausgeführt werden soll, kann aber nur indirekt in welcher Reihenfolge die Plugins laufen. Es ist die Reihenfolge in der sie angegeben sind, was aber mit Profilen nicht mehr möglich ist. 

In gradle sagt man welcher task von welchem abhängig ist, das find ich logischer. 

Dazu kommen dann noch Features wie daemon und build cache, die signifikant schnelleren builds ermöglichen. 

Oder ein fein granulares dependency Management, man kann angeben ob eine Abhängigkeit nur für die implemtierung gebraucht wird oder auch in der API. Der Unterschied ist, was sich ein abhängiges Projekt mit den transitiven Abhängigkeiten machen kann. 

Ich hab auch ein bisschen gebraucht um mit gradle warm zu werden, aber ich find es mittlerweile einfach besser.


----------



## White_Fox (2. Okt 2019)

Ich hab keine Ahnung, weder von Gradle, noch von Maven.

Und vote doch für Gradle, da ich mich da gerade einfuchse, für Gradle und gegen Maven waren drei Dinge ausschlaggebend:

Ich hatte noch nicht den notwendigen Druck, mich mit diesem XML-Geraffel von Maven hinreichend auseinanderzusetzen.
Es hat mir sehr gefallen, wie ControlsFX als Gradle-Projekt aus mehren Projekten aufgebaut ist.
@dzim hat mir dazu geraten.
Und wenn ich hier lese was Gradlenutzer an Gradle so gut finden, dann hab ich anscheinend die richtige Wahl getroffen. Ich mag flexible, mächtige Werkzeuge. Gefrickel ist mir ein Greuel.


----------



## Xyz1 (2. Okt 2019)

Ich wähle Maven aus Protest.


----------



## White_Fox (2. Okt 2019)

Wenn ich mir die Ergebnisse so ansehe, scheint Maven aber definitiv Mainstream zu sein. 

Nachtrag:
Aktuell 7:3 für Maven.


----------



## mihe7 (2. Okt 2019)

White_Fox hat gesagt.:


> Aktuell 7:3 für Maven


Womit Gradle Tottenham schon etwas voraus hat. SCNR.


----------



## dzim (2. Okt 2019)

Auch wenn ich @White_Fox zu Gradle geraten habe, gibt es dennoch so Dinge die mich daran persönlich stören. Am Ende ist es egal, ich verwende primär Maven, weil ich es gewöhnt bin und weil i.d.R. auch neuere Plugins schnell dort vorhanden sind, sodass es aus der Warte selten für mich einen Zwang zum vollständigen Wechsel auf Gradle gibt.


----------

