日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 模块分离部署_GitHub - yangjiu/Mis: 模块接口服务,如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块?...

發布時間:2025/3/20 45 豆豆

MIS

模塊接口服務(Module Interface Service)

MIS主要解決的問題是如何在一個模塊內維護其對外暴露的接口(包括打包發布),而不是把接口和接口實現分離到兩個不同的模塊。

Usage

引用 mis 插件

在根項目的build.gradle中添加mis插件的classpath:

buildscript {

dependencies {

...

classpath 'com.eastwood.tools.plugins:mis:2.0.2'

}

}

在根項目的build.gradle中添加mis插件的相關配置:

...

apply plugin: 'mis'

mis {

compileSdkVersion 27

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

}

}

compileSdkVersion 同 android { compileSdkVersion ... }

compileOptions 同 android { compileOptions { ... } }

創建 mis 目錄

Gradle Sync后,在java同級目錄創建mis文件夾

定義接口,并實現接口服務

直接在mis文件夾下,創建對應的包名、接口類和數據Model。并在java文件夾下實現接口服務。

在模塊目錄內,創建單獨的mis.gradle文件, 并在內聲明mis對應的publication

mis.gradle:

mis {

publications {

main {

groupId 'com.eastwood.demo'

artifactId 'library-sdk'

// version '1.0.0-SNAPSHOT'

dependencies {

compileOnly 'com.google.code.gson:gson:2.8.1'

}

}

}

...

}

main指的是src/main/java中的main,除了main之外,其值還可以為 build types和product flavors對應的值,即對應目錄下的mis。比如與src/debug/java對應的src/debug/mis。

groupId、artifactId、version對應的是Maven的GAV。初次配置時不設置version,發布至maven時設置version。

在dependencies中可聲明該mis Publication編譯和運行時需用到的第三方庫,僅支持compileOnly和implementation。如果mis文件夾下的類使用了kotlin語法,需要添加kotlin相關的依賴,比如'org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version'。

發布mis publication 至 Maven

在根項目的build.gradle中添加mis插件的repositories配置:

mis {

compileSdkVersion 27

...

repositories {

maven {

url "http://***"

credentials {

username '***'

password '***'

}

}

}

...

}

發布用到的插件是maven-publish,其中repositories相關設置請查閱# Maven Publish Plugin

Gradle Sync后,打開Gradle Tasks View,選擇publishMis[...]PublicationToMavenRepository執行發布任務。

其中publishMis[...]PublicationToMavenLocal 是發布至本地maven。如果使用本地maven,請將mavenLocal()添加至根項目的build.gradle中,比如:

allprojects {

repositories {

google()

jcenter()

mavenLocal()

}

}

上文介紹了如何通過mis插件創建接口并發布到maven,接下來介紹接口的注冊和調用。

注冊接口服務

注冊接口需要有個服務容器來管理接口和接口的實現對象。mis提供了一個簡單的MisService服務容器,可根據自己項目實際情況自行選用。

在模塊build.gradle中添加MisService服務容器庫的引用:

dependencies {

implementation 'com.eastwood.common:mis:1.0.0'

}

在MisService服務容器中注冊服務,可以使用 服務接口 + 服務接口的實現對象 或 服務接口的實現類 進行注冊,例如:

// 服務接口 + 服務接口的實現對象

MisService.register(ILibraryService.class, new LibraryService());

// 服務接口 + 服務接口的實現類

MisService.register(ILibraryService.class, LibraryService.class);

在Demo樣例中,接口所在的模塊通過AutoInject在編譯期主動注冊接口。(這推薦下#

獲取接口服務

在其他模塊build.gradle中添加mis庫,以及發布至maven的接口庫:

dependencies {

implementation 'com.eastwood.common:mis:1.0.0'

implementation 'com.eastwood.demo:library-sdk:1.0.0-SNAPSHOT'

}

Gradle Sync后,就可以通過接口在MisService服務容器中查找對應的接口服務并調用,比如:

ILibraryService libraryService = MisService.getService(ILibraryService.class);

libraryService.getLibraryInfo()

Q&A

1.mis目錄下的類會參與編譯嗎?

不會。雖然mis目錄下的類能被java目錄下的類直接引用,但不會參與編譯,真正參與編譯的是該mis目錄生成的jar包,其位于當前工程.gradle/mis下。在當前工程Sync&Build的時候,mis插件會對這些配置了publication的mis目錄進行編譯打包生成jar包,并且依賴該jar包。

mis目錄下的類之所以能被java目錄下的類直接引用,是因為mis目錄被設置為sourceSets aidl的src目錄,而Android Studio對sourceSets aidl的src目錄有特別支持。

2.沒有Maven私服,所有模塊都在一個工程下,其他模塊怎么引用接口?

不設置publication的version。通過misPublication聲明依賴,比如:

dependencies {

...

implementation misPublication('com.eastwood.demo:library-sdk')

}

misPublication運行機理是會自動在當前工程.gradle/mis下查找是否有對應的mis提供的jar包。如果有,就使用對應的mis提供的jar包;如果沒有且指定了version,就使用maven上的jar包。

3.將接口發布到maven后,其他模塊通過misPublication聲明依賴,那jar包用的是.gradle/mis下的還是maven上的?

接口被發布到maven后,其.gradle/mis下的jar包會被刪除,接口所在的模塊根據publication中設置的GAV使用maven上的jar包。如果其他模塊通過misPublication聲明對其依賴,比如:

dependencies {

...

implementation misPublication('com.eastwood.demo:library-sdk')

// 或 implementation misPublication('com.eastwood.demo:library-sdk:1.0.0-SNAPSHOT')

}

不管misPublication中是否設置了的version,都會使用maven上的jar包,其版本同接口所在的模塊publication中的GAV。

當mis目錄下類發生實質性的修改后(生成不同的jar包),在當前工程Sync&Build的時,會在.gradle/mis下的重新生成jar包,接口所在的模塊不管publication中是否設置version,都使用.gradle/mis下的jar包。如果其他模塊通過misPublication聲明對其依賴,不管misPublication中是否設置的version,都會使用.gradle/mis下的jar包。

4.為什么在Gradle Tasks View中找不到publishing相關發布Task?

初次發布時,請檢查對應的publication是否已經設置的version,以及是否添加相關repositories。

5.在mis publication dependencies {}中聲明的依賴會作用于mis publication所在的模塊嗎?

mis publication dependencies {}是用于聲明mis publication編譯和運行時需用到的第三方庫,但不會作用于mis publication所在的模塊。

在開發的時候,src/java下的類能引用到mis依賴的第三方庫類,但編譯時會報錯,提示找不到對應的類。

產生這種情況的原因是mis插件在Gradle sync時,將聲明的依賴傳遞給mis publication所在的模塊。但clean或build時不傳遞。

6.如果mis publication 依賴于其他mis publication怎么處理?

建議使用misPublication包裹GAV,比如:

mis {

publications {

main {

groupId 'com.eastwood.demo'

artifactId 'library-sdk'

dependencies {

implementation misPublication('com.eastwood.demo:module-main-sdk:1.0.0')

}

}

}

repositories {

...

}

}

這里misPublication的作用是,如果所依賴的mis publication也在當前項目,那么與其所提供jar包的方式保持一致。

License

Copyright 2018 EastWood Yang

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

總結

以上是生活随笔為你收集整理的java 模块分离部署_GitHub - yangjiu/Mis: 模块接口服务,如何在一个模块内维护其对外暴露的接口(包括打包发布),而不是把接口和接口实现分离到两个不同的模块?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。