2010-07-16 44 views
2

我想能夠在Java中註釋一個公共類/接口@NonPublic,這將意味着此接口僅用於此項目中,它是而不是這個項目導出的公共API的一部分如何限制在其Jar之外使用Java公共類?

這對於由幾個jar文件組成的項目很常見。並非所有的public類/接口都是真正在你的jar之外公開的。

你知道這樣做的任何工具/框架/插件嗎?

+0

這是OSGi所做的,雖然我懷疑這是超出了你所追求的範圍。 – skaffman 2010-07-16 14:23:39

+0

你能否提供更多細節?這是用於過濾類還是用於強制編程使用類/接口的方式?對於第二種方法,看到你想要一個Eclipse插件可能沒有用,但SecurityManager可以讓人看到來自哪裏的一個調用。 – 2010-07-16 14:51:05

+0

OSGi比我所要求的要多,但肯定能解決它。 OSGi-ing我們的基礎設施不是太難,但不是微不足道的 – espinchi 2010-07-19 12:58:43

回答

2

恕我直言,Java中的包系統是存在的最破碎的東西之一。

我不熟悉任何標準的Java級別的機制,儘管可能很容易編寫一個工具或編譯器擴展來強制執行它。但是,如果你使用的是OSGi(Eclipse就是這樣寫的),它的優點之一就是用於指定更好的包和模塊級別限制的系統。

2

如果沒有OSGi,另一個常見做法是將API與實施分開。

您可以將編譯期間所需的類從運行時所需的類中分離出來。阻止庫的用戶依賴於實現細節。

myLibAPI.jar 
myLibImpl.jar 
+0

這是一個非常好的設計實踐,感謝提示! – espinchi 2010-07-19 13:00:03

1

OSGi Bundle是解決方案。

如果要將Jar轉換爲Eclipse插件,可以使用Eclipse RCP版本。右鍵單擊您的項目:配置 - >轉換爲插件項目

相關問題