Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Maven Firmen Repository Dependencies nicht über Internet
Bin gerade dabei mich über Maven zu informieren, hab auch schon rum probiert etc.
Nehmen wir an ich habe eine Java-Anwendung die die Apache FOP Library benötigt (FOP wiederum benötigt weitere Libraries wie commons-io, commons-logging etc.
In meinem Projekt muss ich ja nun lediglich FOP in der entsprechenden Version angeben. Maven kann diese dependencies dann wunderbar auflösen und die entsprechenden Libraries aus einem Repository z.B. Directory Browsing Disabled laden. Was ja gerade die Stärke von Maven ist.
Aber in einem Unternehmen möchte man doch nicht dass diese Libraries und Abhängigkeiten aus irgendeinem Repository im Inet geladen werden, Sicherheitstechnisch und so? Man möchte die Libraries einmal laden das ist OK. Dann wird alles getestet usw. Danach sollten diese diese Libraries nicht mehr aus dem Inet kommen sondern aus einem Firmen internen Repository?
Wenn ich mir vorstelle Maven in unserer Firma einzusetzen, könnte man also auch eigenes Repository (Artifactory, Nexus oder Archiva) aufsetzen. Besteht dann die Möglichkeit die FOP Libraries und deren benötigte Libraries einmal aus dem Inet zu laden und in das eigene Repository zu bringen?
Hoffentlich habe ich mich halbwegs verständlich ausgedrückt?!
Artifactory, Nexus oder Archiva sind sog. Mirrors. D.h. sie "spiegeln" den content des Central Repositorys. Wenn sie selbst ein Artefakt nicht zur Verfügung stellen können, dann forwarden sie den Request an das Central Repository und haben den Content dann beim nächsten Mal. In den poms Deiner Entwickler muss dann noch folgender Eintrag stehen:
[XML]
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Maven Repository Manager running on repo.mycompany.com</name>
<url>http://repo.mycompany.com/proxy</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
[/XML]
Infos gibts hier: Guide to Mirror Settings
Also habe ich das richtig verstanden:
Wenn ich das Firmen Repository mit z.B. Artifactory aufsetze, muss ich den mirror in meiner pom.xml angeben.
Wenn ich dann eine lib z.B. Apache FOP neu in mein Projekt einbinde, sucht maven die lib im Firmen-Repo. Wenn sie dort nicht gefunden wird, wird sie automatisch auf dem central rep gesucht z.B. repo1.maven.org.
--> Und dann geht Artifactory her und kopiert die neue lib und alle benötigten dependencies in das eigene firmen repository. Und für den nächsten Entwickler wird dann die lib mit allen dependencies aus dem Firmen Repo geladen?
Also für den Entwickler sieht es immer so aus, als würde aus dem FirmenRepo geladen. Sollte mal ein Artifakt nicht vorhanden sein, lädt es Artifactory aus dem Central Repo eben nach. Dies alles bekommt der Entwickler natürlich nicht mit.
OK, wenn denn beim nachladen aus Central Repo die Artefakte im Firmen Repo gespeichert werden und damit in Zukunft aus dem Firmen Repo kommen, dann ist das ja perfekt.
In meinen Augen wäre es nicht so gut wenn jedes Mal das Firmen Repo ein Artifakt aus dem Central Repo holt. Dann kann man sich das Firmen Repo sparen (sofern man nicht noch zusätzliche Libs im Firmen Repo hält die man vielleicht selber programmiert hat)
Das Firmenrepo holt sich nicht jedes mal ein Artefakt aus dem Central Repo, sondern nur wenn es das noch nicht getan hat. Die Artefakte werden gecached. Wir arbeiten mit einem Artifactory, und das läuft wirklich super.
Ich würde den Mirror aber nicht einzeln in der pom.xml eintragen, sondern in der settings.xml, dass wirklich alles nur über den Mirror läuft.
Nicht ganz korrekt, Artifactory etc. sind sog. Repository Manager, sie können als Mirror fungieren, normalerweise arbeiten sie aber als eigenständige Repos die andere, exterene Repos cachen.
Nicht ganz korrekt, Artifactory etc. sind sog. Repository Manager, sie können als Mirror fungieren, normalerweise arbeiten sie aber als eigenständige Repos die andere, exterene Repos cachen.