2009-02-11 35 views
32

Me gustaría hacer algo similar al jython -cp FOO:BAR:BAZ argle.py.

Si agrego FOO, BAR y BAZ a $CLASSPATH esto funciona. Traté de agregarlos al sys.path en tiempo de ejecución, pero eso no parece funcionar para los archivos jar. Es funciona si agrego una ruta a los archivos jar ampliados a sys.path en tiempo de ejecución. ¿Hay una alternativa simple a la explosión de los archivos jar? Aumentar $CLASSPATH para cada usuario que ejecuta este script no es una alternativa aceptable.

Gracias.

+0

¡Me gustaría saber esto también! Miré el script de inicio de jython, pero mi golpe no es lo suficientemente bueno como para entenderlo. –

Respuesta

44

Usted puede utilizar la opción de establecer -Dpython.path:

jython -Dpython.path=FOO:BAR:BAZ argyle.py 
+8

NB: en Windows Reemplazar colon ':' separador con punto y coma ';' separador. jython -Dpython.path = FOO; BAR; BAZ argyle.py – monojohnny

+1

en Windows usan la doble barra invertida \\ al especificar las rutas, y si la ruta contiene espacios lo rodean con comillas dobles. No sé si se requiere la barra inclinada final. Yo hago que las cosas funcionen sin eso. – Paolo

3

Puede crear un JAR grande que contenga todas las clases relacionadas. El siguiente fragmento de hormigas muestra la idea:

<target name="jar"> 
    <mkdir dir="build/jar"/> 
    <unjar src="lib/jython.jar" dest="${classes.dir}" /> 
    <unjar src="lib/FOO.jar" dest="${classes.dir}" /> 
    <unjar src="lib/BAR.jar" dest="${classes.dir}" /> 
    <unjar src="lib/BAZ.jar" dest="${classes.dir}" /> 

    <jar destfile="build/jar/bigjython.jar" basedir="${classes.dir}"> 
     <manifest> 
      <attribute name="Main-Class" value="${main-class}"/> 
     </manifest> 
    </jar> 
</target> 
+0

Ahora, ¿cómo puedo ejecutar mi script usando bigjython.jar? –

+0

El bigjython.jar estaba destinado a incluir el jython.jar original más sus jarras adicionales. Entonces, al final, el jar de bigjython debería funcionar igual que jython.jar pero sin la necesidad del parámetro -cp. – axelclk

+1

No estoy usando jython.jar - Estoy usando el comando 'jython' del shell para ejecutar argle.py –

4

java -cp JAR1: JAR2: jython.jar org.python.util.jython PythonScript .py funciona aquí, tanto en Linux como en Macintosh. En Windows, cambie los dos puntos en los classpaths por punto y coma y debería estar dorado.

17

jython comando admite el paso de argumentos a través de la orden java ... Así que:

jython -J-cp JAR1:JAR2 

puede verificar el comando resultante mediante la adición de --print interruptor:

jython -J-cp JAR1:JAR2 --print 

Lo anterior imprimirá el comando java real en lugar de ejecutarlo.

Cuestiones relacionadas