2014-01-09 64 views
0

如何使用Java發佈API?在像C或C++這樣的語言中,它確實非常簡單,因爲您可以簡單地從代碼中分割出頭文件,但在Java中,這是一個完全不同的故事。所以我知道在Java中沒有真正的方法可以模糊你的代碼,即使你「模糊」它,因爲它可以很容易地反編譯和分析。但是,如果我不能簡單地將頭文件分發給某人,那麼在Java中發佈API的首選方式是什麼?我沒有特別的需求,因爲我處於設計過程的開始階段,所以我非常活躍,我想知道我擁有的所有替代品。如何發佈API?

+0

我將它分發爲JavaARchive(JAR)。 – bblincoe

+0

關於如何發佈自己並不是真正的技術問題,而是如何設計API,如果我應該包含程序的完整運行副本,或者如果我可以發佈一些可編譯的jar,能夠運行我的整個程序。 – th3falc0n

+0

無論哪種方式,最好是編程接口,最好是將它們與獨立模塊(因此獨立的jar)中的實現分開。 –

回答

7

一個簡單的方法是純粹在Java接口中定義您的API,將它們包含到單獨的API模塊中,並使實現模塊依賴於API模塊。這並沒有提供與分離C++頭文件相同的功能,但是將接口編程到完全與特定實現分離的接口是一個好主意。

+0

但是,爲了隱藏類的代碼而編寫接口可能不是一個好主意。當有一個* true *接口時,接口更多地被設計 - 即 - 對於給定的類是(或可能)多於一個實現。我已經看到了太多的代碼,每個類都有自己的接口。它造成了很多混亂。如果你真的只是試圖發佈這個API,javadoc和jar是要走的路。 –

+0

編寫接口的確不是一個好主意,只是爲了隱藏實現,因爲它只會導致產生額外的一堆代碼,我的建議並非如此。主要的好處是相對於實際實現而言演變得慢得多的功能(合同)的乾淨合同,從而爲API的(外部)用戶提供改進的自己的代碼庫的穩定性和清晰度。在例如當前版本的API上看到這些並不令人感到意外。 1.2.2以及目前版本的實施例如1.2.35 ... –

+0

我認爲這就是你的意思,但它似乎好像OP主要是隱藏發行版中的專有代碼(與C++頭文件一樣),所以我想我會提到它。 –

3

您不需要將API發佈爲頭文件。開發人員需要的所有東西都已放在JAR中。如果您想發佈文檔,請發佈代碼的java文檔。

+0

這沒有解決原始問題 –

+0

@OlegS。是的,提供頭文件是關於提供可用的API。這在使用Java時根本不需要。 – schlingel

+0

它強烈依賴於如何定義API。對我來說,它是:[「應用程序編程接口(API)指定一些軟件組件應該如何相互交互」](http://en.wikipedia.org/wiki/Application_programming_interface),以及爲了定義軟件彼此交互不需要有一個實現,接口就足夠了。當然,如果接口是隨機使用或根本不使用的話,那麼就沒有必要把它們分離成一個獨立的模塊。您的工作是關於打包Java代碼,而且還有WAR,它不是一般的。 –

0

你可以使用專業的Java混淆器來混淆你的代碼。然後它不容易反編譯和閱讀。然後你可以發佈你的jar和javadoc,就像其他人提到的一樣。

0

您可以將您的庫拆分爲多個jar,並提供一個包含構成api的類和接口,另一個包含這些接口的實現。

但是,請注意,ha might可能不值得。爲什麼你會試圖混淆該API的用戶需要的代碼呢?我的意思是,任何使用你的API的人都需要接口的實現來運行應用程序,所以他們仍然能夠反編譯你的代碼。

生成api-only jar將有助於分離api和實現,儘管(這意味着您可以替換實現或防止意外直接訪問實現)。