簡體   English   中英

Java API在單獨的JAR文件中

[英]Java API in separate JAR file

我正在制作一個帶有API的Spigot minecraft插件,以允許其他開發人員加入它。 如何在單獨的JAR文件中創建API,其功能與插件本身相同?

我需要這個,因為插件不會公開分發,但我需要允許訪問其中的某些方法/類/對象。

期望的結果:Plugin.jar正在服務器上運行。 我將Plugin-API.jar放在Maven存儲庫中,供其他開發人員使用,以便與plugin.jar進行交互。

我對創建自己的API一般都很陌生,因此非常感謝完全解釋的響應。 謝謝!

評論

請允許我重新提出你的問題。 你有一個插件 - 特別 - 由於某種原因而限制/限制其分發。 相反,您希望提供公開可用的API - SpecialApi - 以允許其他開發人員合並和/或使用Special提供的功能。

這是各種插件(例如Vault,Citizens2,PermissionsEx等)使用的常用方法,但原因不同於您的。 其結構關系在以下組件圖中表示。

在此輸入圖像描述

鑒於你在評論中提到了子模塊,讓我先談談為什么它們可能不是一個好的解決方案。 子模塊的一個常見用途是根據某些標准創建代碼隔離。 例如,Web應用程序可以在功能上分成用於其GUI,業務邏輯,數據持久性等的模塊; 而“大數據”服務可能具有多個模塊,用於分離各種技術的庫。 關於插件的模塊的一個很好的例子是PermissionsEx,它被拆分以支持不同的目標環境。 它有一個包含公共代碼的模塊; 另一個模塊將其核心包裝為Bukkit插件; 和第三個模塊將其核心包裝為Sponge插件。

回答

由於您的主要目的是通過API進行代碼隔離,因此最簡單,最直接的方法是創建兩個單獨的Maven項目 - 一個用於您的插件,另一個用於您的API。

SpecialApi項目

API不應掉以輕心。 如果您將API視為保證某些功能的開發人員之間的合同,這可能會更有意義。 簡而言之,請牢記以下幾點:

  • 一旦發布,API就是一種承諾
  • 您永遠不應該從API中刪除功能
  • 您始終可以向API添加功能
  • 如果繼續實施API,您可以將基礎代碼更改為您的內容

您的API項目將定義與插件接口所需的類,接口和數據結構。 不要錯誤地將API作為插件本身。 您當然可以使用SpigotAPI類和接口,甚至可以定義插件類; 但是,它永遠不應該由Spigot加載。 它只是一個JAR,它將作為其他人provided依賴項引用,但也作為實際插件的一部分進行部署。

您如何提供API JAR取決於您。 如果公共Web服務器上有一些備用空間,則可以手動創建一個小型存儲庫,而無需考慮使用Nexus,Artifactory等服務。

特別插件項目

插件項目包含其他所有內容。 您可以自由添加,更改,更正或刪除內部組件,前提是它不會影響API。 它是一個常規和普通的插件,除了它通常提供的資源,類和數據之外,它還包括相同的API; 通常被稱為胖JAR 否則,您必須將API作為插件單獨加載,或者作為服務器類路徑上的附加條目加載。 最后兩個選項只是討論版本和配置管理問題。

相反,您使用maven-assembly-plugin或類似工具在同一個JAR中提供插件和API代碼。 例如,此程序集配置將任何項目依賴項與compile范圍組合到單個JAR中。

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4.1</version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase> 
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

對於比這更復雜的東西,你會想要看看maven-shade-plugin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM