2015-08-24 29 views

Odpowiedz

6

Konwencja nazewnictwa commons-[library_name] jest starszą, starszą konwencją. Nazwy w stylu org.apache.commons są zgodne z current operating convention bazujących na identyfikatorach grup na nazwach domen. Wszystkie projekty Apache rozpoczęte po utworzeniu konwencji mają identyfikator groupId w postaci org.apache.*. Niektóre projekty rozpoczęte przed konwencją zostały zmienione, a inne nie.

Jakiś czas wcześniej w historii Maven istniała oczywista potrzeba wymuszania unikalnych unikalnych identyfikatorów grupowych we wszystkich projektach w Maven Central, aby uniknąć kolizji nazw. Łatwym sposobem było ustalenie konwencji, w której autorzy projektu mogliby używać jedynie identyfikatorów grup z kontrolowanej przez siebie nazwy domeny. W związku z tym groupIds formularza org.apache.* z organizacji Apache.

Jednak wiele projektów już nie było zgodnych z konwencją, a changing the groupId is not as trivial as it sounds. Głównym powodem jest to, że zarówno stare, jak i nowe id grupy są zależne od konkretnego projektu, oba artefakty zostaną uwzględnione, a następnie masz przypadek, w którym masz różne artefakty zapewniające dokładnie te same klasy, co jest koszmarem klasy.

Niektóre projekty zostały przełączone na nową konwencję, zmieniając również nazwę pakietu wraz z identyfikatorem groupId, na przykład Commons Lang did. Jednak zmiana nazwy pakietu jest ogólnie uważana za dość destrukcyjną, więc Commons Lang zrobił to tylko wraz z niekompatybilnymi zmianami API. Inne projekty, takie jak Commons IO, miały około discussions i back-and-forth na ten temat, ale ostatecznie nigdy nie udało im się dokonać zmiany, ponieważ staromodne nazwisko tak naprawdę nikogo nie rani.

Dlatego obecnie większość projektów Apache ma postać org.apache.*, ale wciąż jest ich kilka.

+0

'commons-io' jest naprawdę dziwne: wygląda na to, że [poszło w drugą stronę] (http://mvnrepository.com/artifact/org.apache.commons/commons-io) (' org.apache.commons '->' commons-io'). – z0r

+1

Najwyraźniej dla 'commons-io: 1.3.2' było [nieprawidłowe wdrożenie] (https://issues.sonatype.org/browse/MVNCENTRAL-244), które spowodowało rozmieszczenie dokładnie POM i słoików w obu' org. .apache.commons: commons-io: 1.3.2' * i * 'commons-io: commons-io: 1.3.2'. (Może ktoś błędnie uważał, że jest to bezpieczny sposób na przejście na nowy konwenans?) Rozwiązali go, zmieniając [POM org.apache.commons' POM] (https://repo1.maven.org/maven2/org/apache /commons/commons-io/1.3.2/commons-io-1.3.2.pom), aby wskazać wersję 'commons-io'. – heenenee

Powiązane problemy