2012-11-30 72 views
3

我正在開發幾個java包,然後作爲jar文件分發。 由於一些新的要求,我現在必須編寫幾個jython的新功能;這些可能會覆蓋很多分離的jython文件中的相當多的代碼。如何在一個jar包中分發包含jython代碼的java包?

我想繼續與每包一個JAR文件的分發。我咬搜索給我提供了這是不幸的是這兩個不是很好兩種方法:

1)jythonc也:我使用Jython 2.5.1,所以jythonc也就是分佈不再一部分。此外,我不喜歡這會放在我的jython代碼上的限制。

2)包裝的一切與jython.jar文件一起。不幸的是,這是不可能的。所有使用我的代碼包的人已經在他們的環境中有一個jython.jar文件(並且其中許多人使用不同的版本)。換句話說,我的包必須在沒有Python核心的情況下分發;相反,我可以依靠它在目標系統的類路徑中找到它。

現在的問題仍然是,是否有包裝我所有的Java和Jython代碼一個罐子內,同時保持jython.jar文件不變的另一種方式?

+0

這個問題是非常相似的http://stackoverflow.com/questions/1252965/distributing-my-python-scripts-as-jars-with-jython/1255113#1255113和作者喜歡我的回答:) –

+1

弗蘭克, 感謝你的回答。不幸的是,這並沒有幫助我。你的建議恰恰是用我自己的東西來擴展jython.jar文件。最後我想得到的是一個包含所有我的java和jython代碼(我分發的)和一個單獨的,未修改的jython.jar(我不分發)的jar文件。正如我所說的,我的jar分發的所有人在他們的環境中已經有一個jython.jar(他們不能/不想覆蓋)。 – Tom

+0

我意識到我應該澄清一點。我想避免在我分發的jar文件中使用jython核心,而是從單獨的jar文件引用它。另一方面,我自己的jython代碼應該包含在分佈式jar文件中。 – Tom

回答

1

我終於找到了我的問題的解決方案。也許這對其他人也有興趣。 正如提醒一樣,這意味着一個java上的混合java/jython包,然後將其交付給客戶,而不是自包含的應用程序。

1)所有的jython源所使用的工具「罐」(或任何其他zip工具)放在一個單獨的文件夾上的JAR文件中的頂層;我使用了「Lib」文件夾。 2)從java中訪問jython代碼是使用建模爲單例的對象工廠類來完成的(類似於here中描述的那樣)。從jython訪問java可以直接使用完整的軟件包名稱。

3)在對象工廠的構造我使用

String jarPath = myObjectFactory.class.getProtectionDomain().getCodeSource().getLocation() .getPath();

從代碼中確定的jar文件的位置。

4)我的jar文件內添加「LIB」文件夾使用

PySystemState newState = new PySystemState(); newState.path.insert(0,Py.newString(jarPath + java.io.File.separator + "Lib")); Py.setSystemState(newState);

只要所述的jython模塊查找路徑作爲jython.jar文件包含在類路徑,這將起作用。