Il meccanismo sottostante utilizzato per indicare a quale versione di Scala è stata compilata una libreria è quello di aggiungere _ < scala-versione > al nome della libreria. Questo approccio abbastanza semplice consente l'interoperabilità con gli utenti di Maven, Ant e altri strumenti di costruzione. - sbt Documentation: Cross-Build Publishing ConventionsPerché la convenzione cross-building aggiunge la versione scala all'artefatto?
Mentre questo è un approccio semplice, l'interoperabilità con Maven e altri strumenti di generazione lascia a desiderare. Poiché lo artifactId
è diverso (ad esempio scalatest_2.9.0
e scalatest_2.10.0
), Maven li tratta come artefatti diversi. Il meccanismo di risoluzione delle dipendenze di Maven è quindi compromesso e più versioni dello stesso artefatto (costruite su versioni di scala differenti) possono finire sul classpath.
Perché non inserire la versione scala nel classificatore? Questo sembra essere una delle principali cause di utilizzo di classificatore:
Il classificatore permette [Maven] distinguere manufatti che sono stati costruiti dal medesimo POM ma differiscono tra loro contenuto. Come motivazione per questo elemento, prendi in considerazione ad esempio un progetto che offre un artefatto che ha come target JRE 1.5, ma allo stesso tempo anche un artefatto che supporta ancora JRE 1.4. Il primo artefatto potrebbe essere equipaggiato con il classificatore jdk15 e il secondo con jdk14 in modo che i client possano scegliere quale utilizzare. - Maven Documentation: POM Reference
Ricordo che questa decisione è stata presa, alcuni anni fa, e sono quasi certo che l'uso del classificatore è stato discusso e rifiutato, con l'accordo che non era una soluzione praticabile. Quello che non riesco a ricordare è perché! –
@SethTisue Grazie per il suggerimento. –