MIS - 模塊接口服務(Module Interface Service)html
模塊A對外暴露SDK(接口+數據Model),在運行時,經過接口將對應的接口服務註冊到服務容器中。java
模塊B引用模塊A對外暴露的SDK,經過SDK中的接口在服務容器中查找對應的接口服務並調用。git
基於上述,MIS須要解決的問題:github
模塊如何對外暴露SDKapache
這裏所述的SDK對應的就是一個jar包,其實就是Android module中,打一個包含接口和數據model的jar包。app
如何經過接口查找對應的服務maven
維護一個Map,接口爲key, 對應的接口服務爲value,是否是就能夠了?ide
在根項目的build.gradle中添加 mis 插件的引用:gradle
buildscript { dependencies { classpath 'com.eastwood.tools.plugins:mis:1.0.5' } }
在模塊的build.gradle中添加mis 插件:ui
apply plugin: 'mis'
在src/main/java 同級目錄,建立mis文件夾
定義接口和數據Model,實現對應接口服務
直接在mis文件夾下,建立對應的包名、接口類和數據Model(即對外暴露SDK)。並在java文件夾下,實現對應的接口服務。
在模塊 build.gradle 中dependencies中,經過 misSource
聲明,例如:
dependencies { ... implementation misSource( group: 'com.eastwood.demo', name: 'library-sdk' // version: 1.0.0 // 上傳maven時指定版本號 ) }
在模塊build.gradle中添加mis服務容器庫引用:
dependencies { implementation 'com.eastwood.common:mis:1.0.0' }
而後,在MisService(服務容器)註冊服務,能夠使用 服務接口 + 服務接口的實現對象 或 服務接口的實現類 進行註冊,例如:
// 服務接口 + 服務接口的實現對象 MisService.register(ILibraryService.class, new LibraryService()); // 服務接口 + 服務接口的實現類 MisService.register(ILibraryService.class, LibraryService.class);
在其餘模塊build.gradle中添加mis庫,以及經過 misProvider
引用sdk:
dependencies { implementation 'com.eastwood.common:mis:1.0.0' implementation misProvider('com.eastwood.demo:library-sdk') }
Sync後,就能夠經過接口在MisService服務容器中查找對應的接口服務並調用,例如:
ILibraryService libraryService = MisService.getService(ILibraryService.class); libraryService.getLibraryInfo()
接口調試結束後,需將mis
文件夾打包上傳至Maven。
在根項目的 build.gradle 或 模塊 build.gradle 中添加配置:
apply plugin: 'mis-maven' misMaven { username = '用戶名' password = '密碼' repository = 'maven上對應的倉庫地址' snapshotRepository = 'maven上對應的快照倉庫地址' }
dependencies { ... implementation misSource( group: 'com.eastwood.demo', name: 'library-sdk' version: 1.0.0 // 上傳maven時必須指定版本號,支持'version-SNAPSHOT' ) }
除了GAV等必配項,還有如下配置:
dependencies String[] 類型
若上傳的sdk引用其餘類庫,需配置對應的GAV,例如:
dependencies { ... implementation misSource( group: 'com.eastwood.demo', name: 'library-sdk', version: '1.0.0', dependencies = ['com.google.code.gson:gson:2.8.1'] ) }
另外,在MicroModule目錄結構下的配置
dependencies { ... implementation misSource( group: 'com.eastwood.demo', name: 'library-sdk', version: '1.0.0', microModuleName: '**microModule name**', dependencies = ['com.google.code.gson:gson:2.8.1'] ) }
打開Gradle Tasks View,在對應項目執行上傳任務。
上傳成功以後,需指定或更新 misProvider
中的version。
dependencies { implementation 'com.eastwood.common:mis:1.0.0' implementation misProvider('com.eastwood.demo:library-sdk:1.0.0') }
不指定misSource 和 misProvider 中的version。
MIS已經上傳至Github,歡迎star交流。
https://github.com/EastWoodYang/Mis