# Was ist besser für den Anfang, Maven oder Gradle?



## Maliko (10. Jun 2021)

Moin,

ich hab bisher immer nur mit Java-Ant gearbeitet und wenn ich irgendwelche Pakete brauchte hab ich mir die Jar-Files besorgt und diese einfach ins Projekt eingebunden. Ich würd mich aber jetzt doch gern mal mit moderneren Technologien auseinandersetzen (Spring, JavaFX, etc.). Da würde es sich denke ich mal anbieten von Ant auf Gradle oder Maven umzusteigen (davon mal abgesehen dass ich es nicht geschafft habe JavaFX unter Ant zum laufen zu bringen).

Daher wollte ich euch mal fragen, was würdet ihr mir empfehlen? Was macht mehr Sinn sich drauf zu Konzentrieren? Gradle oder Maven? Wie schon gesagt alles was ich an Java kann, hab ich mir selbst beigebracht und außer Ant hab ich noch gar nix gemacht, es ist also so oder so alles Neuland für mich.

Danke schon mal im Voraus.

LG
Maliko


----------



## mihe7 (10. Jun 2021)

Steht ein mehr oder weniger einfacher Build-Prozess im Vordergrund, bei dem es einfach darum geht, dass es funktioniert -> Maven. Willst Du im Build alles mögliche "skripten" können -> Gradle. 

Maven = XML zur Beschreibung von hauptsächlich Abhängigkeiten (deskriptiver Ansatz)
Gradle = auf Groovy basiere Task-orientierte DSL (ein ant-ähnlicher Ansatz)

Persönlich gefällt mir Maven besser, wird aber Geschmackssache sein. Letztlich wirst Du früher oder später mit beiden Systemen in Kontakt kommen.


----------



## LimDul (11. Jun 2021)

Vom Bauchgefühl her (allerdings ist der Einblick logischerweise limitiert), ist in Unternehmen eher maven verbreitet, während gradle mir eher bei open source projekten untergekommen ist. Ist allerdings wie gesagt limitiert der Einblick auf meine persönlichen Erfahrungen.

Afaik ist gradle vor allem in Richtung Mobile Apps verbreiteter als Maven dort. Aber im Endeffekt kommt man mit beiden zum Ziel und egal welches man sich ansieht, man macht nichts falsch.


----------



## mrBrown (11. Jun 2021)

Also das schöne an Gradle ist, dass man damit alles auf jede beibiege Art und Weise umsetzen kann, das Problem ist aber, dass genau das auch gemacht wird – deshalb bin ich grad bei Anfängern ganz klar für Maven.


----------



## Oneixee5 (11. Jun 2021)

Maven funktioniert in vielen Firmen schlecht mit den Proxys und die Doku finde ich auch schlecht gemacht. Man findet irgendwie nie was man gerade braucht. In kleinen Projekten setzte ich oft Apache Ant mit Apache Ivy (Ivy kann auch alle Bibliotheken aus einem Maven Repo ziehen) ein, diese Kombi hat mich noch nie enttäuscht. Ansonsten wirst du nicht drumherum kommen dich mit Maven und Gradle zu beschäftigen.


----------



## kneitzel (11. Jun 2021)

Also die Probleme mit dem Proxy sind real. Daher ja vor nicht zu langer Zeit auch mal meine Nachfrage, ob ich da nicht etwas übersehen habe.

-> Proxy benötigt Authentifizierung: cntlm nutzen - das ist diesbezüglich eine top Lösung.

-> Wenn es (auch) Build Systeme ohne Netz gibt, dann wäre mein Tipp Reposilite. Das ist unsere Lösung für eine Entwicklungsumgebung in einem abgesicherten Netz. Da deployen wir auch alle unsere Projekte rein was dann von Vorteil ist, da wir halt auch einige Libraries haben, auf die dann andere Projekte zugreifen müssen.
So man noch Systeme hat, die Internet Zugang haben, dann füllt Reposilite das automatisch (Mirror Einstellung). 
Datenübertragung / Abgleich ist einfach bei uns über ein git Repository. Das repository von Reposilite ist da mit drin und wenn es Änderungen gab, dann können wir die einfach adden / commiten / pushen ... (Die Startscripte machen immer erst ein pull)

Also alles Top. Wir nutzen auch den Maven Wrapper - der wird auch aus dem Reposilite gezogen dank einfacher Umgebungsvariable. Zugriff auf reposilite geht über die maven Config.


----------



## kneitzel (11. Jun 2021)

Noch zur Ergänzung die genauen Schritte der Konfiguration:
a) Maven Wrapper Umgebungsvariable: 
MVNW_REPOURL=http://127.0.0.1:8080/central 

b) ~/.m2/settings.xml - Proxy habe ich mit gezeigt - der ist aber hier nicht active. Wenn man aber nur einen proxy will und keinen central mirror, dann wäre das der maven Part.

```
<settings>
  <mirrors>
    <mirror>
      <id>central-proxy</id>
      <name>Local proxy of central repo</name>
      <url>http://127.0.0.1:8080/central</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  <proxies>
    <proxy>
      <id>local-proxy</id>
      <active>false</active>
      <protocol>http</protocol>
      <host>127.0.0.1</host>
      <port>9000</port>
    </proxy>
  </proxies>
</settings>
```

c) Reposilite läuft natürlich über Port 8080 bei uns. Da erklärt es sich von alleine, aber da ist dann der wichtige Teil:

```
proxied [
  https://repo1.maven.org/maven2
]
```

d) Ggf. noch das Startscript auf Windows - da erkennt man den Proxy, den wir mitgeben. Da ist bei uns nun ein ZScaler dahinter, aber bei einem cntlm sähe es ebenso aus ...

```
@echo off
cd /D %~dp0
title "Reposilite: git pull"
git pull
title "Reposilite: Running (Mirror Config)"
java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=9000 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=9000 -jar reposilite-2.9.18.jar --config=.\reposilite_mirror.cdn
title "Reposilite: Ended..."
```

Das einfach mal als schnelle Übersicht, wie das mit den Proxies aussehen würde. Aber ein Proxy alleine ist erst einmal nichts wildes....


----------

