评论
请允许我重新提出你的问题.你有一个插件 - 特别 - 由于某种原因而限制/限制其分发.相反,您希望提供公开可用的API - SpecialApi - 以允许其他开发人员合并和/或使用Special提供的功能.
这是各种插件(例如Vault,Citizens2,PermissionsEx等)使用的常用方法,但原因不同于您的.其结构关系在以下组件图中表示.
鉴于你在评论中提到了子模块,让我先谈谈为什么它们可能不是一个好的解决方案.子模块的一个常见用途是根据某些标准创建代码隔离.例如,Web应用程序可以在功能上分成用于其GUI,业务逻辑,数据持久性等的模块; 而"大数据"服务可能具有多个模块,用于分离各种技术的库.关于插件的模块的一个很好的例子是PermissionsEx,它被拆分以支持不同的目标环境.它有一个包含公共代码的模块; 另一个模块将其核心包装为Bukkit插件; 和第三个模块将其核心包装为Sponge插件.
回答
由于您的主要目的是通过API进行代码隔离,因此最简单,最直接的方法是创建两个单独的Maven项目 - 一个用于您的插件,另一个用于您的API.
SpecialApi项目
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>
Run Code Online (Sandbox Code Playgroud)
对于比这更复杂的东西,你会想要看看maven-shade-plugin.
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |