当我调用Jython *而没有*将它们添加到$ CLASSPATH时,如何将jar添加到类路径?

时间:2009-02-11 16:39:41

标签: classpath jython jar

我想做一些与jython -cp FOO:BAR:BAZ argle.py类似的事情。

如果我将FOOBARBAZ添加到$CLASSPATH,则可行。我尝试在运行时将它们添加到sys.path,但这似乎不适用于jar。如果我在运行时将扩展jar的路径添加到sys.path 可以正常工作。是否有一个简单的替代方案来爆炸jar文件?对于运行此脚本的每个用户,增加$CLASSPATH是不可接受的替代方案。

感谢。

4 个答案:

答案 0 :(得分:45)

您可以使用-D选项设置python.path

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

答案 1 :(得分:19)

jython命令支持将参数传递给java命令......所以:

jython -J-cp JAR1:JAR2

您可以通过添加--print开关验证生成的命令:

jython -J-cp JAR1:JAR2 --print

上面将打印出实际的java命令而不是执行它。

答案 2 :(得分:4)

java -cp JAR1:JAR2:jython.jar org.python.util.jython pythonScript.py适用于Linux和Macintosh。在Windows上,将类路径中的冒号换成分号,你应该是金色的。

答案 3 :(得分:3)

您可以创建一个包含所有相关类的大型JAR。以下ant片段显示了这个想法:

<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>