2015-08-24 18 views

risposta

6

La convenzione di denominazione commons-[library_name] è la convenzione precedente e legacy. I nomi dello stile org.apache.commons seguono lo current operating convention di basare groupIds sui nomi di dominio. Tutti i progetti Apache avviati dopo la creazione della convenzione hanno un ID gruppo del formato org.apache.*. Alcuni progetti avviati prima della costituzione della convenzione hanno cambiato i loro groupIds mentre altri no.

All'inizio della storia di Maven, era evidente l'esigenza di applicare universalmente groupId univoci su tutti i progetti in Maven Central per evitare conflitti di nomi. Un modo semplice per garantire che era quello di stabilire una convenzione in cui gli autori del progetto potevano usare solo groupIds da un nome di dominio che controllavano. Quindi groupIds del modulo org.apache.* dall'organizzazione Apache.

Tuttavia, molti progetti non erano ancora conformi alla convenzione e changing the groupId is not as trivial as it sounds. Il motivo principale è che se sia il vecchio che il nuovo groupId dipendono da un particolare progetto, saranno incluse entrambe le risorse e quindi si avrà un caso in cui si hanno artefatti diversi che forniscono esattamente le stesse classi, che è un incubo di classloading.

Alcuni progetti sono passati alla nuova convenzione cambiando anche il nome del pacchetto insieme al groupId, come Commons Lang did. Tuttavia, la modifica del nome del pacchetto è generalmente considerata piuttosto dirompente, quindi Commons lo ha fatto solo con modifiche API incompatibili. Altri progetti, come Commons IO, avevano circa discussions e back-and-forth a riguardo, ma alla fine non sono mai riuscito a fare il passaggio, perché il nome vecchio stile in realtà non ferisce nessuno.

Ecco perché oggi la maggior parte dei progetti Apache ha il formato org.apache.*, ma ce ne sono ancora alcuni che non lo sono.

+0

'commons-io' è davvero strano: sembra avere [andato nell'altra direzione] (http://mvnrepository.com/artifact/org.apache.commons/commons-io) (' org.apache.commons '->' commons-io'). – z0r

+1

Apparentemente per "commons-io: 1.3.2' si è verificata una [distribuzione non corretta] (https://issues.sonatype.org/browse/MVNCENTRAL-244) che ha causato la distribuzione esatta di POM e giare su entrambi .apache.commons: commons-io: 1.3.2' * e * 'commons-io: commons-io: 1.3.2'. (Forse qualcuno ha pensato erroneamente che questo fosse un modo sicuro per passare alla nuova convenzione?) L'hanno risolto cambiando il POM ['org.apache.commons'] (https://repo1.maven.org/maven2/org/apache /commons/commons-io/1.3.2/commons-io-1.3.2.pom) per indicare la versione 'commons-io'. – heenenee