2016-11-23 2 views
2

J'utilise le plugin Universal du paquetage-sbt-native-packager pour créer un paquet zip. J'utilise le paramètre ci-dessous pour créer une structure par défaut:Comment modifier la structure de nommage des bibliothèques dépendantes dans le fichier zip produit par sbt-native-packager?

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.4") 

enablePlugins(JavaAppPackaging) 

Actuellement, toutes mes dépendances de projet à l'automne zip sous le dossier lib par exemple

lib/ 
    ch.qos.logback.logback-classic-1.1.3.jar 
    dom4j.dom4j-1.6.1.jar 

Comment puis-je changer le nom de toutes les bibliothèques ne contiennent que la artifactId et la version du pot et non le nom complet. Par exemple, pour ce qui précède, je veux quelque chose comme ceci:

lib/ 
    logback-classic-1.1.3.jar 
    dom4j-1.6.1.jar 

Répondre

0

La logique de cela est codé en dur dans l'archétype JavaAppPackaging. Cependant, vous pouvez remapper vos dépendances de bibliothèque.

mappings in Universal := (mappings in Universal).value.map { 
    case (file, dest) if dest.startsWith("lib/") => 
     file -> changeDestination(dest) 
    case mapping => mapping 
} 

def changeDestination(dest: String): String = ??? 

Ensuite, vous devez changer la scriptClasspathOrdering qui est responsable du app_classpath défini dans le BashStartScriptPlugin.

scriptClasspathOrdering := scriptClasspathOrdering.value.map { 
    case (file, dest) if dest.startsWith("lib/") => 
     file -> changeDestination(dest) 
    case mapping => mapping 
} 

Le dossier de destination doit être lib/ que le script bash assume cela.

Notez que je n'ai pas testé cela car c'est un cas d'utilisation très inhabituel. Cependant l'idée principale devrait être claire :)

acclamations, Muki