Comment invoquer groovy avec 'java' depuis la ligne de commande
J'ai d'expédier certains groovy code pour certains utilisateurs qui n'ont que java est installé (pas de grooy, pas de $groovy_home, etc). Je suis en train d'invoquer groovy à partir de la ligne de commande, mais je vais avoir pas de chance. Voici mon fichier bat:
java -classpath .;lib;bin;bin-groovy introspector.AclCollector
Et voici mon exception:
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 12 more
Could not find the main class: introspector.AclCollector. Program will exit.
Quelqu'un a une idée? J'ai des "groovy-all-1.6-beta-1.jar' en \lib dir.
source d'informationauteur Miguel Ping
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin de la liste explicite de l'groovy jar dans le classpath
Vous avez ici un autre exemple de Groovy application appelée à partir de Java (dans ce cas, à partir de fourmi, mais l'idée générale est la même).
Comme mentionné par frankowyer, vous avez exactement le groovy pot explicitement énumérés dans le classpath arguments de la java.
Depuis vos clients n'ont pas de variable d'environnement spécial, il suffit de remplacer le
%GROOVY_HOME%/...
avec le chemin d'accès complet:Une façon d'éviter les problèmes liés aux différences de classe chemins d'accès sur différentes machines serait de regrouper toutes les dépendances nécessaires en un seul pot, ce serait également faire la distribution aux utilisateurs plus facile. Cela peut être fait avec cette "GroovyWrapper' script. La valeur par défaut pots (intégrable/groovy-tous-.jar et lib/commons.jar) sont inclus par défaut dans le script et si vous avez besoin d'autres POTS, ils peuvent être facilement ajoutés.
Voir http://docs.codehaus.org/display/GROOVY/WrappingGroovyScript pour le scénario complet et des instructions.
Voici un exemple d'utilisation de GroovyWrapper:
Dire que vous avez groovy script HelloWorld.groovy, utilisez GroovyWrapper pour la construction de HelloWorld.jar comme suit:
GroovyWrapper compiler le script HelloWorld.groovy à HelloWorld.class et crée un auto-exécutable jar HelloWorld.jar.
Maintenant, vous pouvez utiliser le HelloWorld.jar pour le lancement de la HelloWorld script, simplement en exécutant:
GRANDE RÉPONSE par VonC:
c'est pour windows Vista:
Dans les Propriétés Système de l'Environnement | les Variables | les variables Utilisateur:
Nom de la Variable
GROOVY_HOME
ensemble deC:\groovy\Groovy-1.8.5
et le Nom de la Variable
CLASSPATH
valeur est définie pour inclure.;%GROOVY_HOME%\embeddable\groovy-all-1.8.5.jar
Ne faites pas l'erreur que j'ai fait(tourner mes roues un peu), pas de préparation pour la fin de la chemin de de la "groovy" avec ".;" (point et point-virgule): le chemin d'accès doit le dossier de base, vous êtes dedans pour trouver la classe principale(aussi étrange que cela semble)
Attention de [~]!
En première ligne tilde n'est pas traité par bash, et java ne peuvent pas le comprendre.
En deuxième ligne tilde est remplacé par bash et tout fonctionne bien.