2015-08-24 10 views

Antwort

6

Die commons-[library_name] Namenskonvention ist die ältere, alte Konvention. Die Namen org.apache.commons-style folgen der current operating convention basing groupIds auf Domain-Namen. Alle Apache-Projekte, die nach dem Einrichten der Konvention gestartet wurden, haben eine groupId der Form org.apache.*. Einige Projekte, die vor der Einrichtung der Konvention gestartet wurden, haben ihre groupIds geändert, andere dagegen nicht.

Irgendwann früh in der Geschichte von Maven gab es einen offensichtlichen Bedarf, universell eindeutige GroupIds über alle Projekte in Maven Central zu erzwingen, um Namenskollisionen zu vermeiden. Eine einfache Möglichkeit, dies sicherzustellen, bestand darin, eine Konvention einzurichten, bei der Projektautoren nur GroupIds von einem von ihnen kontrollierten Domainnamen verwenden konnten. Daher Gruppen-IDs der Form org.apache.* von der Apache-Organisation.

Allerdings haben sich viele Projekte bereits nicht an die Konvention gehalten, und changing the groupId is not as trivial as it sounds. Der Hauptgrund dafür ist, dass, wenn sowohl die alten als auch die neuen groupIds Abhängigkeiten eines bestimmten Projekts sind, beide Artefakte eingeschlossen werden und Sie dann einen Fall haben, in dem Sie verschiedene Artefakte haben, die exakt die gleichen Klassen bereitstellen, was ein Albtraum ist.

Einige Projekte wurden auf die neue Konvention umgestellt, indem auch der Paketname zusammen mit der groupId wie Commons Lang did geändert wurde. Das Ändern des Paketnamens wird jedoch allgemein als ziemlich störend angesehen, weshalb Commons Lang dies nur zusammen mit inkompatiblen API-Änderungen tat. Andere Projekte, wie Commons IO, hatten einige discussions und back-and-forth darüber, aber letzten Endes kamen sie nie zum Wechsel, weil der alte Name niemanden wirklich verletzt.

Deshalb haben heute die meisten Apache-Projekte die Form org.apache.*, aber es gibt noch ein paar, die nicht sind.

+0

'commons-io' ist wirklich seltsam: es scheint [in die andere Richtung gegangen] (http://mvnrepository.com/artifact/org.apache.commons/commons-io) (' org.apache.commons '->' commons-io'). – z0r

+1

Offenbar gab es für 'commons-io: 1.3.2' eine [falsche Implementierung] (https://issues.sonatype.org/browse/MVNCENTRAL-244), die dazu führte, dass die exakten POMs und Jars auf beiden org bereitgestellt wurden .apache.commons: commons-io: 1.3.2' * und * 'commons-io: commons-io: 1.3.2'. (Vielleicht dachte jemand irrtümlicherweise, dass dies ein sicherer Weg sei, um zu der neuen Konvention zu wechseln?) Sie lösten es, indem sie das [org.apache.commons' POM] (https://repo1.maven.org/maven2/org/apache) änderten /commons/commons-io/1.3.2/commons-io-1.3.2.pom), um auf die 'commons-io'-Version zu zeigen. – heenenee

Verwandte Themen