Welche Vorausetzungen und Annahmen?
Beispielsweise dass man ein Internet hat, dass man keine
Reproduzierbarkeit braucht (was beides oft stimmt, aber eben nicht
immer), das man bestimmte Ablagestrukturen hat. Überhaupt wird
definiert, wie ein Repository aussieht, dass es eins gibt und
dass es "global" ist.
Selbst Begriffe wie "Release" werden verwendet (unterstützt),
wobei diese natürlich von Umfeld und Projekt abhängen (und
formale Sachen sein können bzw. eigentlich sogar sind).
Klar genau wie Ant oder jedes andere Build Tool, damit ich den Quellcode compilieren und packetieren kann....
Zum "nur Kompilieren" ist Maven nicht unbedingt geeignet, glaube
ich. Es macht viel mehr. Was man in OpenSource Projekten oder PoC
natürlich gerne nutzt. Die Compiler-Plugins sind aber nicht
unbedingt überzeugend. Irgendwie funktioniert die Codegenerierung
mit dem neuen nicht in allen Fällen und die Fehlermeldungen bei
den alten nicht (werden abgeschnitten). Ist einem natürlich egal,
wenn man eh nur über IDE baut, weil man da die Meldungen ja
sieht.
(ich will nicht weiter werten, was Maven macht, sondern es nur
mal nennen).
Kann man mit jeder Art von Versionskontrollsystem (
CVS, Subversion, Mercurial, Bazaar, ... etc.).
Die aufgezählten SCMs basieren alle auf lokalen Dateien. Es gibt
aber auch andere Arten von Versionskontrollsystemen. Da darf man
beispielsweise vielleicht Sourcefiles nicht schreiben, was
bedeutet, man kann eincheckte Indicies nicht updaten. Je nach
Konfiguration kann das mit Maven ein Problem sein, weil man das
lokale Repository beispielsweise nicht einchecken kann.
(was nicht heißt, dass man es einchecken soll; es geht eben nur
nicht mehr, wenn man es tut, bitte keine Diskussion, dass das
doch toll sei, weil man seinen Fehler wenigstens merkt, es ist
und bleibt ein ungewollter Effekt).
Das macht auch keinen sinn Binärartefakte in ein Git Repository
abzulegen oder allgemein in ein Versionskontrollsystem...
Für GIT stimmt das, daher nennt sich GIT selbst auch gerne
"Content Tracker". Das ist toll für Source Code, aber nicht so
gut für binäre Artifakte.
Maven verwaltet Binärartefakte in einem sogenannten Repository
und ein Repository ist ein Begriff aus dem Configuration
Management (Component repository). Ein Unterschied zu einem
Filesystem ist die Versionierung. Kurz: Ein Repository ist
ziemlich genau ein Versionskontrollsystem für Binärartefakte.
Das ist übrigens auch genau das, was Maven macht: hol mir genau
diese Version von diesem und jenem Artifakt. Versionskontrolle.
Natürlich für ganz andere Zwecke optimiert, als GIT. Daher nimmt
man oft einfach beides
Im Unternehmen nutzt man dann einen Repository Manager (Archiva,
Artifactory, Nexus)....für OpenSource kann man Maven Central
Nutzen (
hier steht wie es
geht). Oder man kann auch so Sachen wie
Bintray nutzen..
Ja, es gibt Unternehmen, die können sich das vorgeben lassen. Und
es gibt Unternehmen bzw. Projekte, da geben die Gutachter und
viele weitere Anforderungen sowas vor. Beispielsweise kann man
durchauch WORM als Repository fordern (was so ohne weiteres
erstmal keine Index-Files erlaubt).
Exkurs:
Man darf nicht vergessen, dass die OpenSource Welt bestimmte
Probleme nicht so direkt hat.
Man sieht aber auch, dass Reproduzierbarkeit an Bedeutung
gewinnt, so ist TOR wohl inzwischen reproduzierbar und man
arbeitet an einer reproduzierbaren Debian (das finde ich total
Klasse!), da gabs einen schönen talk beim 31c3.
Die Probleme, die man da hat, sind schon sehr umfangreich. Eine
Ursache dafür sind "versteckte Annahmen", wie wir sie hier haben.
(Daher habe ich den Post nochmal rausgekramt und ein Follow-Up
geschrieben, ich hoffe, es gefällt euch, wäre sonst Schade um die
Arbeit).
~/1b