web-dev-qa-db-ja.com

$ CLASSPATHに追加せずにJythonを呼び出すときに、jarをクラスパスに追加するにはどうすればよいですか?

jython -cp FOO:BAR:BAZ argle.pyと同様のことをしたいのですが。

FOOBAR、およびBAZ$CLASSPATHに追加すると、これは機能します。実行時にそれらをsys.pathに追加しようとしましたが、jarでは機能しないようです。実行時にsys.pathに展開されたjarファイルへのパスを追加すると、それはdoes機能します。 jarファイルを分解する簡単な方法はありますか?このスクリプトを実行するすべてのユーザーに対して$CLASSPATHを拡張することは、許容できる代替策ではありません。

ありがとう。

38
Hank Gay

-Dオプションを設定するpython.path

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

jythonコマンドは、Javaコマンドへの引数の受け渡しをサポートしています...したがって:

jython -J-cp JAR1:JAR2

--printスイッチを追加して、結果のコマンドを確認できます。

jython -J-cp JAR1:JAR2 --print

上記は実際のJavaコマンドを実行する代わりに出力します。

22
Pat G

Java -cp JAR1:JAR2:jython.jar org.python.util.jython pythonScript.pyは、LinuxとMacintoshの両方で動作します。 Windowsでは、クラスパスのコロンをセミコロンに交換すると、黄金色になります。

4
hd1

関連するすべてのクラスを含む大きな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>
3
axelclk