2010-03-21 4 views
3

J'essaie de remplacer un tas de scripts shell Linux avec des scripts Scala. L'un des défis restants est de savoir comment analyser un répertoire entier de fichiers JAR et les placer dans le classpath. Actuellement, cela est fait dans le script shell avant d'appeler la scala JVM. Je voudrais éliminer complètement le script shell.Auto-modifier le classpath dans un script Scala?

Existe-t-il un élégant langage de scala pour cela?

J'ai trouvé cette autre question, mais en Java, il ne semble guère utile de salir avec elle: How do you change the CLASSPATH within Java?

Répondre

6

La machine virtuelle Java prend en charge elle-même une notation wild-card dans le chemin de la classe. Si /foo/bar est un répertoire contenant des fichiers JAR, que vous souhaitez tous figurer dans le chemin d'accès aux classes, vous pouvez inclure /foo/bar/* dans le chemin d'accès aux classes au lieu d'énumérer chaque fichier JAR individuellement.

Je ne suis pas sûr que cela suffira pour vos besoins, mais c'est pratique quand c'est approprié.

+0

Mais ceci est implémenté seulement dans JDK 1.6 – Andrey

+2

Nous vous souhaitons la bienvenue dans le présent. –

2

Um, ceci est directement supporté, vous n'avez même pas besoin du support java. Est-ce que tu l'as essayé?

scala -cp '/foo/bar/*' 
0

Ce script parcourt le lib dir récursive:

import java.io.File 
import java.util.regex.Pattern 

def cp(root: File, lib: File): String = { 
    var s = lib.getAbsolutePath.replaceFirst(
    Pattern.quote(root.getAbsolutePath) + File.separator + "*", "") + 
    File.separator + "*" 
    for (f <- lib.listFiles; if f.isDirectory) 
    s += File.pathSeparator + cp(root, f) 
    s 
} 

Par exemple:

/project 
    lib 
    |__dep 
    |__dep2 
    |__dep3 

Vous appelez:

var f = new File("/path/to/project") 
cp(f, f) 

Résultat:

Questions connexes