40

I'd like to do something similar to jython -cp FOO:BAR:BAZ argle.py.

If I add FOO, BAR, and BAZ to $CLASSPATH this works. I tried to add them to sys.path at run-time, but that doesn't appear to work for jars. It does work if I add a path to the expanded jars to sys.path at runtime. Is there a simple alternative to exploding the jar files? Augmenting $CLASSPATH for every user that runs this script is not an acceptable alternative.

Thanks.

Hank Gay
  • 70,339
  • 36
  • 160
  • 222
  • I'd like to know this as well! I looked at the jython startup script, but my bash isn't good enough to understand it. – Avi Flax Feb 24 '09 at 03:38

4 Answers4

51

You can use the -D option to set python.path:

jython -Dpython.path=FOO:BAR:BAZ argyle.py
dusan
  • 9,104
  • 3
  • 35
  • 55
awithrow
  • 1,103
  • 9
  • 18
  • 8
    NB: on Windows Replace colon ':' separator with semi-colon ';' separator. jython -Dpython.path=FOO;BAR;BAZ argyle.py – monojohnny Nov 09 '11 at 22:03
  • 1
    on Windows use the double backslash \\ when specifying paths, and if the path name contains spaces surround it with double quotes. Don't know if the trailing slash / is required. I get things work without it. – Paolo Apr 07 '13 at 15:07
22

jython command supports passing arguments through to the java command... So:

jython -J-cp JAR1:JAR2

You can verify the resulting command by adding --print switch:

jython -J-cp JAR1:JAR2 --print

The above will print out the actual java command instead of executing it.

Pat G
  • 221
  • 2
  • 2
7

java -cp JAR1:JAR2:jython.jar org.python.util.jython pythonScript.py works here, both on Linux and Macintosh. On Windows, swap the colons in the classpaths for semicolons and you should be golden.

Nishu Tayal
  • 20,106
  • 8
  • 49
  • 101
hd1
  • 33,938
  • 5
  • 80
  • 91
3

You can create a big JAR which contains all related classes. The following ant snippet shows the 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>
axelclk
  • 950
  • 9
  • 28
  • Now how do I run my script using bigjython.jar? – Hank Gay Feb 11 '09 at 17:02
  • The bigjython.jar was meant to include the original jython.jar plus your extra jars. So at the end the bigjython jar should work the same as jython.jar but without the need of the -cp parameter. – axelclk Feb 11 '09 at 20:28
  • 1
    I'm not using jython.jar - I'm using `jython` command from the shell to execute argle.py – Hank Gay Feb 11 '09 at 22:33