2011-11-18 41 views
3

是否可以將jar包中的.class文件從默認包 移動到另一個命名包,以便我可以導入和使用它們?如何使用jarjar從默認包中重新打包.class文件?

在瀏覽其他問題後,我認爲jarjar可能正是我正在尋找的, ,但我不知道如何使用它。

所以我的問題是如何使用jarjar將.class文件從默認包重新打包到另一個命名包?

編輯:我想澄清的東西 - 我沒有罐子的來源我想重新包裝, 所以我不知道我可以重新編譯代碼。 混淆和反思是不可能的。

EDIT2:看起來它非常簡單的使用jarjar做:) Java的罐子jarjar.jar過程rules.rules in.jar out.jar

rules.rules是這個樣子: 規則網.ylivay.src.a

問題解決!

+0

我正在將其粘貼給其他人,因爲您可能已經意識到這一點,因爲您認識到需要將這些類移動到真正的包中:這是另一個關於爲什麼默認包不好的http:// stackoverflow的stackoverflow問題。 com/questions/7849421/is-use-javas-default-package-bad-style – whaley

+0

有沒有可能您可以粘貼完整rules.rule文件? :) – Shark

回答

1

您需要重新編譯然後更改包 - 通過簡單地移動jar(或外部)中的類文件不會幫助您。

+0

我只有.class文件,而不是我想重新打包的jar中的源代碼,所以我如何重新編譯它們? – YLivay

1

要將類移動到不同的包中,不僅需要在jar(或filesystem)目錄結構中更改它們的位置,還需要更改源文件中的package聲明,然後重新編譯這些類。

不要試圖重新打包一個jar,你應該看看IDE中可用的強大的重構工具,比如Eclipse,這使得這種事情變得簡單。但是既然你說(在更新你的問題中)你沒有源文件,那是不可能的。

另一種方法是創建代理類,它使用反射調用默認包中需要的代理類。但這不僅是不愉快的事情,而且你說反射是不可能的。

所以你不能做你想做的。

+0

我沒有資源,反編譯是不可能的。 – YLivay

+0

在這種情況下,你搞砸了。 – sudocode

+0

我懷疑這一點。必須有辦法做到這一點。 – YLivay

相關問題