From: <ast...@gm...> - 2008-02-02 03:50:53
|
I've been struggling to create a jar file for something that I wrote. So I started reading the wikis and whatnot. >From http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts under the heading "Building jars - some examples", it says in the second paragraph: "The following example scripts were developed on Linux (and the bash shell), but with minor modifications, you should be able to do the same thing in an MS DOS box on MS Windows." Alas, cp is non-existent in Windows, and zip command is also non-existent. I also read http://wiki.python.org/jython/LearningJython but again, it is not mainly for Windows users. Can anyone point me to a tutorial on how to create jar files specifically for non-java programmers and Windows users? My scripts work perfectly btw if I run it from the MS DOS command line. Regards, astigmatik |
From: Charlie G. <cha...@gm...> - 2008-02-03 10:32:23
Attachments:
build.xml
|
On Feb 1, 2008 7:50 PM, <ast...@gm...> wrote: > I've been struggling to create a jar file for something that I wrote. > So I started reading the wikis and whatnot. > > >From http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts > under the heading "Building jars - some examples", it says in the > second paragraph: > > "The following example scripts were developed on Linux (and the bash > shell), but with minor modifications, you should be able to do the > same thing in an MS DOS box on MS Windows." > > Alas, cp is non-existent in Windows, and zip command is also non-existent. I always grab Cygwin(http://www.cygwin.com/) to do these Unixy things on Windows. It has both zip and cp. Alternatively DOS has a copy command which does similar things to cp, and the jar command can do pretty much everything that zip can, but the syntax for both differ from zip and cp so you'll have to do some translating. > Can anyone point me to a tutorial on how to create jar files > specifically for non-java programmers and Windows users? My scripts > work perfectly btw if I run it from the MS DOS command line. I think it's going to be pretty hard to find a resource for building jar files that isn't for Java programmers, but the Java based tools for doing this stuff aren't awful. I've attached a build.xml for use with Ant that builds a single executable jar as described in the wiki. It expects that jython.jar and a Python module named main.py will be in the same directory with build.xml. It compiles main.py to bytecode and includes that bytecode, any Python modules in Lib in the current directory, and the contents of jython.jar in a new jar file called build/myapp.jar. You can then run that jar with java -jar build/myapp.jar; unlike the wiki method, this one doesn't require any classpath manipulation. The files copied from Lib should be importable from main.py, so you can use it to start up your application. If you need things from Jython's Lib, make sure to include the standalone jar from the installer since it'll include those files. To run it, just execute ant in the directory with build.xml and the supporting files. Charlie |
From: Gibb <cap...@gm...> - 2008-03-05 12:59:27
|
It works.. but you can only execute the script specified in the MANIFEST Main-Class property. What if you have multiple jython scripts that you need to distribute? Eg. java hello$py -jar myapp.jar --> Exception in thread "main" java.lang.NoClassDefFoundError: hello$py G. PS. Here is an ant build that uses the <script> task to compile multiple files in a folder: It requires commons-logging.jar, bsf.jar & jython.jar in your ant lib folder. <project name="jython-jar" default="compile" basedir="."> <target name="init"> <property name="pydir" value="${basedir}/jython"/> <property name="classdir" value="${basedir}/build"/> <mkdir dir="build"/> </target> <target name="jython-compile"> <script language="jython"> import py_compile, glob for scriptFilename in glob.glob(pydir+'/*.py'): classFile = scriptFilename[0:-3]+'$py.class' print "compiling %s to %s.." % (scriptFilename, classFile ) py_compile.compile(scriptFilename,classFile) </script> <move todir="${classdir}"> <fileset dir="${pydir}"> <include name="**/*.class"/> </fileset> </move> </target> <target name="compile" depends="init"> <antcall target="jython-compile"/> </target> </project> Charlie Groves wrote: > > On Feb 1, 2008 7:50 PM, <ast...@gm...> wrote: >> I've been struggling to create a jar file for something that I wrote. >> So I started reading the wikis and whatnot. >> >> >From http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts >> under the heading "Building jars - some examples", it says in the >> second paragraph: >> >> "The following example scripts were developed on Linux (and the bash >> shell), but with minor modifications, you should be able to do the >> same thing in an MS DOS box on MS Windows." >> >> Alas, cp is non-existent in Windows, and zip command is also >> non-existent. > > I always grab Cygwin(http://www.cygwin.com/) to do these Unixy things > on Windows. It has both zip and cp. Alternatively DOS has a copy > command which does similar things to cp, and the jar command can do > pretty much everything that zip can, but the syntax for both differ > from zip and cp so you'll have to do some translating. > >> Can anyone point me to a tutorial on how to create jar files >> specifically for non-java programmers and Windows users? My scripts >> work perfectly btw if I run it from the MS DOS command line. > > I think it's going to be pretty hard to find a resource for building > jar files that isn't for Java programmers, but the Java based tools > for doing this stuff aren't awful. I've attached a build.xml for use > with Ant that builds a single executable jar as described in the wiki. > It expects that jython.jar and a Python module named main.py will be > in the same directory with build.xml. It compiles main.py to bytecode > and includes that bytecode, any Python modules in Lib in the current > directory, and the contents of jython.jar in a new jar file called > build/myapp.jar. You can then run that jar with java -jar > build/myapp.jar; unlike the wiki method, this one doesn't require any > classpath manipulation. The files copied from Lib should be > importable from main.py, so you can use it to start up your > application. If you need things from Jython's Lib, make sure to > include the standalone jar from the installer since it'll include > those files. To run it, just execute ant in the directory with > build.xml and the supporting files. > > Charlie > > > -- View this message in context: http://www.nabble.com/Distributing-Jython-scripts-%28newbie-frustrations%29-tp15239468p15849430.html Sent from the jython-users mailing list archive at Nabble.com. |
From: Ivan H. <pil...@gm...> - 2008-02-04 08:55:42
|
Dear Astigmatic, i hope my example can help you. i'm developing an interface between a COM application and Primavera API (which is Java). working on xp using eclipse with pydev. i had problem making jar files with jython 2.2.x, as jythonc is not working anymore, but fortunately Greg wrote this nice article about distributing jython scripts. i've created my solution too based on this article. in the jython installation package there is an option to install Standalone jython. beside of the standard installation package i installed this option too in a different folder. in this folder there is only one jar file, containing all necessary jython module, which is existing in the standard installation folder. i renamed this standalone jar to Scheduler_IF.jar. using Total Commander you can modify archives. so open the standalone jar file, and in the lib folder created a subfolder (schif) which contains all my jython scripts with __init__.py (to be a package). then because my application requires third party jars too these needs to be copied also in the standalone jar file. e.g. i need to use java com bridge, for this purpose i've selected jacob, so i need to copy from the original jacob.jar com folder to the standalone jar com folder (jacob). the same needs to be done for the PV integration api jar file. so after that in the Scheduler.jar/com i have jacob, primavera, and ziclix folders. then i have a __run__.py file next to the Scheduler_IF.jar import sys from schif.schIFBase import Options from schif.schIFMain import IfMain if __name__ == '__main__': oOption = Options(['pvuser', 'pvpwd', 'pmsuser', 'pmspwd', 'xml', 'transfer'], {'log':'INFO'}) oOption.parse() oOption.check() if oOption.oCheckError: print "Missing parameters: --%s" % ", --".join(oOption.oCheckError) sys.exit() oApp = IfMain(oOption) oApp.start() these packages are in the Scheduler_IF.jar file: from schif.schIFBase import Options from schif.schIFMain import IfMain and i have a start.bat, which starts the whole application. > @echo off > setlocal > set DIR_JAVA=C:\Program Files\Java\jdk1.5.0_12\ > set ARGS= > :loop > if [%1] == [] goto rundemo > set ARGS=%ARGS% %1 > shift > goto loop > > :rundemo > "%DIR_JAVA%bin\java.exe" -Xms1024M -Xmx1024M -XX:PermSize=256M > -XX:MaxPermSize=256M -jar SchedulerIF.jar __run__.py %ARGS% > > > endlocal > as you can see it starts java exe with the Scheduler_IF.jar giving as first parameter the __run__.py, and the other parameters. On Feb 2, 2008 4:50 AM, <ast...@gm...> wrote: > I've been struggling to create a jar file for something that I wrote. > So I started reading the wikis and whatnot. > > >From http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts > under the heading "Building jars - some examples", it says in the > second paragraph: > > "The following example scripts were developed on Linux (and the bash > shell), but with minor modifications, you should be able to do the > same thing in an MS DOS box on MS Windows." > > Alas, cp is non-existent in Windows, and zip command is also non-existent. > > I also read http://wiki.python.org/jython/LearningJython but again, it > is not mainly for Windows users. > > Can anyone point me to a tutorial on how to create jar files > specifically for non-java programmers and Windows users? My scripts > work perfectly btw if I run it from the MS DOS command line. > > Regards, > astigmatik > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > -- "De sagittis hungarorum libera nos, Domine!" - "A magyarok nyilaitól ments meg Uram minket!" http://www.freeweb.hu/pillesoft |
From: Dave K. <dku...@re...> - 2008-02-04 20:04:23
|
<astigmatik <at> gmail.com> writes: > > I've been struggling to create a jar file for something that I wrote. > So I started reading the wikis and whatnot. > > >From http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts > under the heading "Building jars - some examples", it says in the > second paragraph: > > "The following example scripts were developed on Linux (and the bash > shell), but with minor modifications, you should be able to do the > same thing in an MS DOS box on MS Windows." > > Alas, cp is non-existent in Windows, and zip command is also non-existent. UNIX: $ cp source dest MS Windows: > copy source dest UNIX: $ export XXX= ... MS Windows: > set XXX= ... Also, on MS Windows, don't forget to use back-slash instead of forward-slash for the path separator. You can down-load the zip/unzip command-line tools for MS Windows here: http://www.info-zip.org/ zip and unzip work the same way on UNIX/Linux and MS Windows. Also, for display the contents of Zip files (but not for building them), the following might be handy: http://www.rexx.com/~dkuhlman/#zip-ls-a-zip-file-listing-program-written-in- python (if that URL wraps, you will have to piece it back together.) Because the file/ path names in a jar file are often so long, I find the following useful for displaying jar file contents: $ jython zip-ls -c s xxx.jar Since, jar files are zip files, if you prefer, you can probably also do some of what you need with the java "jar" command that comes with the JDK distribution. - Dave |
From: <ast...@gm...> - 2008-02-06 05:13:41
|
Thanks for all the replies. I've to read up on Ant before I'll try it, and also Info-Zip as well. I'm a slow learner, so it'll take some time for me to digest everything. Kindly correct me if I'm wrong, but here's what I understand so far from the wiki: cd c:\Jython2.2.1 copy jython.jar jythonlib.jar zip -r jythonlib.jar Lib cd c:\MyDocuments\MyApp\ copy c:\Jython2.2.1\jythonlib.jar myapp.jar zip myapp.jar Lib/showobjs.py <- wait a minute, what's this? Shouldn't the last line read: zip myapp.jar *.py since I'm already in the MyDocuments/MyApp/ dir, and all my .py files are there? Or do I have to move all my *.py files in the Lib/ subfolder? If let's say, I create a subfolder named "MyApp" (with __init__.py in it and all my .py files) in Lib/ can I just do: cd c:\Jython2.2.1 copy jython.jar jythonlib.jar zip -r jythonlib.jar Lib copy jythonlib.jar myapp.jar zip myapp.jar Lib\MyApp This is all theoretical (I haven't even downloaded info-zip yet).. Sorry for my questions :-/ |
From: <ast...@gm...> - 2008-02-06 05:44:08
|
Btw, I have a directory structure which is something like this: c:\My Documents\Jython2.2.1\Projects\MyApp MyApp contains all my .py files. It also has a images\ folder where all the gifs are stored (used for JFrame icons, etc). Right now, to "get to a file", I use: img = os.sep.join( [os.path.dirname(__file__), ] + "images/name_of_an_image.gif") img = ImageIcon(img).getImage() someJFrame.setIconImage(img) If I jar my MyApp, how do I write the above properly? |
From: Dave K. <dku...@re...> - 2008-02-06 17:12:49
|
<astigmatik <at> gmail.com> writes: > zip myapp.jar Lib/showobjs.py <- wait a minute, what's this? > > Shouldn't the last line read: > > zip myapp.jar *.py > > since I'm already in the MyDocuments/MyApp/ dir, and all my .py files > are there? Or do I have to move all my *.py files in the Lib/ > subfolder? Or maybe use: $ zip myapp.jar Lib/*.py while in the parent directory, so that the directory structure is reproduced in your jar file. After doing this a few times and then listing your jar file contents (with "unzip -l") this will all become clear, I hope. > > If let's say, I create a subfolder named "MyApp" (with __init__.py in > it and all my .py files) in Lib/ can I just do: > > cd c:\Jython2.2.1 > copy jython.jar jythonlib.jar > zip -r jythonlib.jar Lib > copy jythonlib.jar myapp.jar > zip myapp.jar Lib\MyApp Yes, I agree. Just make sure that that you maintain the directory structure in your jar file. You can check that with unzip. To list jar file contents, use something like: $ unzip -l jythonlib.jar Also, you will need to add the -r (recurse into directories) flag. Use: $ zip -r myapp.jar Lib\MyApp instead of: $ zip myapp.jar Lib\MyApp - Dave |