2012-12-31 49 views
6

考慮使用特定的版本化jar來實現方法的常見情況,但不公開或公開或保護API中的該jar中的任何類型(僅在私有方法的方法簽名中)。在SBT中,是否可以自動命名爲mangle私有包?

現在我想要的是通過名稱自動編譯時鏈接此代碼 - 將原始包名替換爲原始包名並將其替換爲SBT中生成的代碼(再次:我想將插件添加到SBT或設置中build.sbt在每個sbt compile上執行此操作)。

這樣做的目標是避免具有相同包/類名的多個類可能不兼容的版本的類路徑錯誤。注意:在上面描述的情況下,內聯或者這個名稱應該總是有效,並且允許一個側面版本的地獄(以較大的瓶子爲代價)。

+0

聽起來像它可能是[Scala宏]的用例(http://scalamacros.org/)? – logan

+3

這是OSGi常用的東西。 OSGi使用類加載器的巧妙技巧來代替名稱修飾,但它達到了相同的效果。 –

+0

我不知道有什麼辦法可以做到maven-shade-plugin的類重定位:http://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html – mpilquist

回答

2

這聽起來像ProGuard將能夠做的事情。有一個SBT ProGuard plugin,但它似乎沒有積極維護。

如果我正在處理這個問題,我個人認爲,我會尋找一個自定義類加載器的解決方案,而不是名稱加固。

+0

請解釋「個人而言,我會尋找一個自定義類加載器」 – samthebest

相關問題