I've got a relatively large Java application that would benefit from a bit of Python love. To that end I've been working on getting it up and running in Jython. My current roadblock is getting the classpath right.
I've taken two approaches to setting the classpath:
- Using a shell script, I've built up a list of jars and executed
java -cp ${CP} -jar jyton.jar
where $CP is a list of the jars needed for my app. This doesn't seem to work. I'm unable to import any classes from these jars, getting onlyImportError: No module named apache
instead. - Using a bootstrap python script, i've created a list of paths using glob, and appended them to the current path using
[sys.path.append(path) for path in JAR_LIST]
. This seems to work correctly; I can now import any of the classes I need to from the included jars.
The above is a bit confusing as most information I've been able to find has steered towards using $CLASSPATH and -cp to added your jars, but I can't get that to work. So the question so far: Is #2 the proper way to add dependancies to your classpath when using Jython?
The main reason I question my methods is because I'm still having problems fully utilizing my application. A number of places in my app reverences resources using relative URLs : classpath:some-critical-file.xml
some-critical-file.xml and a number of my classes reside within the same jar. I'm able to import classes from that jar, but any attempts to load my xml with classpath:some-critical-file.xml
results in a java.io.FileNotFoundException
Any insight as to why my classes are available but relative paths to resources using classpath:
are not would be much appreciate. I'm at a loss at this point.