From 2d74d0fb91e4fac0feb113feace8659f89d7920a Mon Sep 17 00:00:00 2001 From: xiwa Date: Tue, 29 Mar 2022 05:12:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=AE=AF=E7=BB=84=E4=BB=B6=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=92=8C=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/ProtocolComponentRepository.java | 9 ++ .../iotkit/dao/ProtocolGatewayRepository.java | 4 +- data/elasticsearch/nodes/0/_state/_3.cfe | Bin 0 -> 278 bytes data/elasticsearch/nodes/0/_state/_3.cfs | Bin 0 -> 1274 bytes data/elasticsearch/nodes/0/_state/_3.si | Bin 0 -> 378 bytes .../nodes/0/_state/manifest-0.st | Bin 0 -> 109 bytes data/elasticsearch/nodes/0/_state/node-0.st | Bin 0 -> 89 bytes data/elasticsearch/nodes/0/_state/segments_5 | Bin 0 -> 245 bytes data/elasticsearch/nodes/0/_state/write.lock | 0 data/elasticsearch/nodes/0/node.lock | 0 .../manager/config/ElasticSearchConfig.java | 76 +++++++++++ .../controller/ProtocolController.java | 120 +++++++++++------- .../src/main/resources/application-dev.yml | 7 + manager/src/main/resources/application.yml | 7 + ...colGateway.java => ProtocolComponent.java} | 11 +- pom.xml | 2 +- .../cc/iotkit/comps/ComponentClassLoader.java | 30 +++++ protocol-gateway/mqtt-component/.DS_Store | Bin .../mqtt-component/dependency-reduced-pom.xml | 79 ++++++++++++ 19 files changed, 293 insertions(+), 52 deletions(-) create mode 100755 dao/src/main/java/cc/iotkit/dao/ProtocolComponentRepository.java create mode 100644 data/elasticsearch/nodes/0/_state/_3.cfe create mode 100644 data/elasticsearch/nodes/0/_state/_3.cfs create mode 100644 data/elasticsearch/nodes/0/_state/_3.si create mode 100644 data/elasticsearch/nodes/0/_state/manifest-0.st create mode 100644 data/elasticsearch/nodes/0/_state/node-0.st create mode 100644 data/elasticsearch/nodes/0/_state/segments_5 create mode 100644 data/elasticsearch/nodes/0/_state/write.lock create mode 100644 data/elasticsearch/nodes/0/node.lock create mode 100644 manager/src/main/java/cc/iotkit/manager/config/ElasticSearchConfig.java rename model/src/main/java/cc/iotkit/model/protocol/{ProtocolGateway.java => ProtocolComponent.java} (71%) create mode 100644 protocol-gateway/component-server/src/main/java/cc/iotkit/comps/ComponentClassLoader.java mode change 100644 => 100755 protocol-gateway/mqtt-component/.DS_Store create mode 100644 protocol-gateway/mqtt-component/dependency-reduced-pom.xml diff --git a/dao/src/main/java/cc/iotkit/dao/ProtocolComponentRepository.java b/dao/src/main/java/cc/iotkit/dao/ProtocolComponentRepository.java new file mode 100755 index 00000000..68d51cbb --- /dev/null +++ b/dao/src/main/java/cc/iotkit/dao/ProtocolComponentRepository.java @@ -0,0 +1,9 @@ +package cc.iotkit.dao; + +import cc.iotkit.model.protocol.ProtocolComponent; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ProtocolComponentRepository extends MongoRepository { +} diff --git a/dao/src/main/java/cc/iotkit/dao/ProtocolGatewayRepository.java b/dao/src/main/java/cc/iotkit/dao/ProtocolGatewayRepository.java index d304423c..8248a283 100755 --- a/dao/src/main/java/cc/iotkit/dao/ProtocolGatewayRepository.java +++ b/dao/src/main/java/cc/iotkit/dao/ProtocolGatewayRepository.java @@ -1,11 +1,11 @@ package cc.iotkit.dao; -import cc.iotkit.model.protocol.ProtocolGateway; +import cc.iotkit.model.protocol.ProtocolComponent; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; @Repository -public interface ProtocolGatewayRepository extends MongoRepository { +public interface ProtocolGatewayRepository extends MongoRepository { } diff --git a/data/elasticsearch/nodes/0/_state/_3.cfe b/data/elasticsearch/nodes/0/_state/_3.cfe new file mode 100644 index 0000000000000000000000000000000000000000..cf99088bf5625d865d7b89fabca7ebe890759c25 GIT binary patch literal 278 zcmcD&o+B>qQ<|KbmuhO@oS$2eUz(TVnpaYknOe*M1T&9(IKDFS&sz=7)5~-XV}CJl zu;`_wRDh&_Ko3GOIPk|q%&;(tH_%JTPlk%;L1{mbrd%jz50st<6wHGPGDblKSD~0x zk_nY(Vu8wsf=nubaF`+?G-ErOrUHmK^8*OY;DIWin*tGM(SXVyI-oK61(eNDd+lv6 E09fZbod5s; literal 0 HcmV?d00001 diff --git a/data/elasticsearch/nodes/0/_state/_3.cfs b/data/elasticsearch/nodes/0/_state/_3.cfs new file mode 100644 index 0000000000000000000000000000000000000000..4d78d2464bca17efdfe4c3ec9f14f85be378fc4a GIT binary patch literal 1274 zcmah|&ubGw6rS0nsjaYxmKM?CLB#eDNuf=O2Machu0|;&Aw-a{*`372-JP&INt58A zAk-GYOO&7o5f6eO2%bIEB6uixD`Nfv4=Q^qZ6fN-{-B$*)(6X*<$dqlZ|8k)?u$A$ zlB`HbM>COmtd(&^m*XN40gb00txvCWzkW;%ZN3Um-R^)niXL^)voi?=sj?~PGO7u3 z?LhqcMDrUfu+ZP1PqO}#ZvXTmHi@E_%&eghWW=#VL9qXm!yY;xN&49uZ-ZNmZR`Lw zH;^qq*v|!)*Uxe6BlH=j4?DAnI0=BcW$(0?y<&9!#r~>Wgi8=Yzq+sQE)6nu#~pRi zh<#UrUc@G4=JpBWf}~zXfP>(V8{GIJGVCtzniAO1L~@~Mrz76A{0nAQibbUcBOoZ# zVX{B=m;vxB&At3EX)C>~V(D($Kq!q2&5SD&p*^8~rM__lrb{X=h-x4NA$PBbbfoqC zJ0m^qs*I%wHjwNXCLx-{HQ4?Mfe?Jg!Ex@47o*39EWX8EoE#qLtZHj0Lb?#k33uwLoK_~+%9*IePYI3Lr6-aPm6x!lDTE;Tti?CI ziiEKtE4oN1Z|6Q`)HWVdaw>NZPfvPLDeYvWd^8ciZt;Sc7P1X7lU4FJ>kGN1-KO0j zN)jp)i$`)_haYe8c1Np<*&evSJgPB4RD;EvJGoQ<|Kbmug`aoSL4SnpfhPmzK`}1T&9(IKDFS&sz=7)5~-XV}F6fIDnWF z#9&0`fcT7DO!>tezKO{S{=o_n+*yfbiF#$Jc`5ltLjFaG$vLSC&iO?J`9+B(nfZA< zQ0by#AcxaX&qB{2-pI_5A0nI!)CiX0GBVWz3hO2r8u8_T9SM_Rwa~NFGhojz)=Ml( z&S0ysFpD=c5dmv2D$Og&%uR)<JCys=(!CL54UPAi5`sf_Z_kTVZ1$uCMxam!52 qNhx;AFUn0U(aX(GN#$~K4GxJ94sdmKVK|^M`2{H8KtOS#qZI(z>u)Fk literal 0 HcmV?d00001 diff --git a/data/elasticsearch/nodes/0/_state/manifest-0.st b/data/elasticsearch/nodes/0/_state/manifest-0.st new file mode 100644 index 0000000000000000000000000000000000000000..030f9cbe09eade2c5fa41802ec7ca16ee9e3ac1f GIT binary patch literal 109 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%yklS_+=Qu9jUOHzw+4@^nUDJ=%F;=u~z%TkMq tGxPHfbf%}~r4}WY0NDp8Wag!$R>UJjihun4eL!RK3!sr;pmG1sCIFIlD$W1^ literal 0 HcmV?d00001 diff --git a/data/elasticsearch/nodes/0/_state/node-0.st b/data/elasticsearch/nodes/0/_state/node-0.st new file mode 100644 index 0000000000000000000000000000000000000000..a819c66f42c5335dada71a9525e4aec2c24bd285 GIT binary patch literal 89 zcmcD&o+Hj$T#{Il%D}+D2*OsHT&%y^^72zs<1zeDFQX|3Cj$pi1_UHofCM8@ zfGOS>P2n#NpVH*iyi^PG|4;zZ0As^wkQgJH&OabQ1{R*Y{FK!AvecsD%=|odb3;=D zBTGxsoW$ai_{8Mo)Pj=K6qqcdAy0B?Q4!F|@g=E6xr~PFV7-|sV#)DlZZ6)Qi6Nfh cRf(bDnel#=u94*jG$y|QTLL7WWS?UJ01?Sx(*OVf literal 0 HcmV?d00001 diff --git a/data/elasticsearch/nodes/0/_state/write.lock b/data/elasticsearch/nodes/0/_state/write.lock new file mode 100644 index 00000000..e69de29b diff --git a/data/elasticsearch/nodes/0/node.lock b/data/elasticsearch/nodes/0/node.lock new file mode 100644 index 00000000..e69de29b diff --git a/manager/src/main/java/cc/iotkit/manager/config/ElasticSearchConfig.java b/manager/src/main/java/cc/iotkit/manager/config/ElasticSearchConfig.java new file mode 100644 index 00000000..e67249e1 --- /dev/null +++ b/manager/src/main/java/cc/iotkit/manager/config/ElasticSearchConfig.java @@ -0,0 +1,76 @@ +package cc.iotkit.manager.config; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.node.InternalSettingsPreparer; +import org.elasticsearch.node.Node; +import org.elasticsearch.transport.Netty4Plugin; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +import java.util.Collections; + +@Slf4j +@Configuration +public class ElasticSearchConfig { + + static { + System.setProperty("es.set.netty.runtime.available.processors", "false"); + } + + + @SneakyThrows + @Bean + public EmbeddedElasticSearch getEmbeddedElasticSearch(ConfigProperty configProperty) { + if (configProperty.enabled) { + EmbeddedElasticSearch embeddedElasticSearch = new EmbeddedElasticSearch(configProperty); + embeddedElasticSearch.start(); + return embeddedElasticSearch; + } + return null; + } + + @Component + @ConfigurationProperties(prefix = "elasticsearch.embedded") + public static class ConfigProperty { + + private boolean enabled; + + private String dataPath = "./data/elasticsearch"; + + private String homePath = "./"; + + private int port = 9200; + + private String host = "0.0.0.0"; + + public Settings.Builder applySetting(Settings.Builder settings) { + return settings.put("network.host", host) + .put("http.port", port) + .put("path.data", dataPath) + .put("path.home", homePath); + } + + } + + public static class EmbeddedElasticSearch extends Node { + + @SneakyThrows + public EmbeddedElasticSearch(ConfigProperty properties) { + super(InternalSettingsPreparer.prepareEnvironment( + properties.applySetting( + Settings.builder() + .put("node.name", "test") + .put("discovery.type", "single-node") + .put("transport.type", Netty4Plugin.NETTY_TRANSPORT_NAME) + .put("http.type", Netty4Plugin.NETTY_HTTP_TRANSPORT_NAME) + .put("network.host", "0.0.0.0") + .put("http.port", 9200) + ).build(), Collections.emptyMap(), null, () -> "default"), + Collections.singleton(Netty4Plugin.class), false); + } + } +} diff --git a/manager/src/main/java/cc/iotkit/manager/controller/ProtocolController.java b/manager/src/main/java/cc/iotkit/manager/controller/ProtocolController.java index 03a02fdc..13cf7f48 100755 --- a/manager/src/main/java/cc/iotkit/manager/controller/ProtocolController.java +++ b/manager/src/main/java/cc/iotkit/manager/controller/ProtocolController.java @@ -6,13 +6,14 @@ import cc.iotkit.comp.CompConfig; import cc.iotkit.comp.mqtt.MqttComponent; import cc.iotkit.comps.ComponentManager; import cc.iotkit.converter.ScriptConverter; -import cc.iotkit.dao.ProtocolGatewayRepository; +import cc.iotkit.dao.ProtocolComponentRepository; import cc.iotkit.dao.UserInfoRepository; import cc.iotkit.manager.service.DataOwnerService; import cc.iotkit.manager.utils.AuthUtil; import cc.iotkit.model.Paging; import cc.iotkit.model.UserInfo; -import cc.iotkit.model.protocol.ProtocolGateway; +import cc.iotkit.model.protocol.ProtocolComponent; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -20,10 +21,17 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.Optional; @Slf4j @@ -34,8 +42,11 @@ public class ProtocolController { @Value("${gateway.function-jar}") private String functionJar; + @Value("${spring.servlet.multipart.upload-dir}") + private String uploadDir; + @Autowired - private ProtocolGatewayRepository gatewayRepository; + private ProtocolComponentRepository protocolComponentRepository; @Autowired private DataOwnerService dataOwnerService; @@ -46,11 +57,35 @@ public class ProtocolController { @Autowired private ComponentManager componentManager; - @PostMapping("/addGateway") - public void addGateway(ProtocolGateway gateway) { - Optional optGateway = gatewayRepository.findById(gateway.getId()); - if (optGateway.isPresent()) { - throw new BizException("gateway already exists"); + private Path fileStorageLocation; + + @SneakyThrows + @PostConstruct + public void init() { + this.fileStorageLocation = Paths.get(uploadDir).toAbsolutePath().normalize(); + Files.createDirectories(this.fileStorageLocation); + } + + @PostMapping("/uploadJar") + public void uploadJar(@RequestParam("file") MultipartFile file) { + if (file == null) { + throw new BizException("file is null"); + } + + String fileName = StringUtils.cleanPath(file.getOriginalFilename()); + try { + Path targetLocation = this.fileStorageLocation.resolve(fileName); + Files.copy(file.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING); + } catch (IOException ex) { + throw new BizException("upload jar error", ex); + } + } + + @PostMapping("/addComponent") + public void addComponent(ProtocolComponent component) { + Optional optComponent = protocolComponentRepository.findById(component.getId()); + if (optComponent.isPresent()) { + throw new BizException("component already exists"); } try { Optional optUser = userInfoRepository.findById(AuthUtil.getUserId()); @@ -58,72 +93,71 @@ public class ProtocolController { throw new BizException("user does not exists"); } - gateway.setScript("new (function () {this.decode = function (msg) {return null; };})().decode(msg)"); - gateway.setCreateAt(System.currentTimeMillis()); - gateway.setUid(AuthUtil.getUserId()); - gateway.setUuid(optUser.get().getUid()); - gatewayRepository.save(gateway); + component.setScript("new (function () {this.decode = function (msg) {return null; };})().decode(msg)"); + component.setCreateAt(System.currentTimeMillis()); + component.setUid(AuthUtil.getUserId()); + protocolComponentRepository.save(component); } catch (Throwable e) { - throw new BizException("add protocol gateway error", e); + throw new BizException("add protocol component error", e); } } - @PostMapping("/saveGateway") - public void saveGateway(ProtocolGateway gateway) { - Optional optGateway = gatewayRepository.findById(gateway.getId()); - if (!optGateway.isPresent()) { - throw new BizException("the gateway does not exists"); + @PostMapping("/saveComponent") + public void saveComponent(ProtocolComponent component) { + Optional optComponent = protocolComponentRepository.findById(component.getId()); + if (!optComponent.isPresent()) { + throw new BizException("the protocol component does not exists"); } Optional optUser = userInfoRepository.findById(AuthUtil.getUserId()); if (!optUser.isPresent()) { throw new BizException("user does not exists"); } - ProtocolGateway oldGateway = optGateway.get(); - gateway = ReflectUtil.copyNoNulls(gateway, oldGateway); - dataOwnerService.checkOwner(gateway); + ProtocolComponent oldComponent = optComponent.get(); + component = ReflectUtil.copyNoNulls(component, oldComponent); + dataOwnerService.checkOwner(component); try { - gatewayRepository.save(gateway); + protocolComponentRepository.save(component); } catch (Throwable e) { - throw new BizException("add protocol gateway error", e); + throw new BizException("add protocol component error", e); } } - @PostMapping("/saveGatewayScript") - public void saveGatewayScript(@RequestBody ProtocolGateway gateway) { - Optional optGateway = gatewayRepository.findById(gateway.getId()); - if (!optGateway.isPresent()) { - throw new BizException("the gateway does not exists"); + @PostMapping("/saveComponentScript") + public void saveComponentScript(@RequestBody ProtocolComponent component) { + Optional optComponent = protocolComponentRepository.findById(component.getId()); + if (!optComponent.isPresent()) { + throw new BizException("the component does not exists"); } - dataOwnerService.checkOwner(gateway); - ProtocolGateway oldGateway = optGateway.get(); - oldGateway.setScript(gateway.getScript()); + dataOwnerService.checkOwner(component); + ProtocolComponent oldComponent = optComponent.get(); + oldComponent.setScript(component.getScript()); try { // gatewayService.saveFunction(oldGateway.getUuid(), oldGateway.getId(), // "new (function (){" + oldGateway.getScript() + "})()", functionJar); - gatewayRepository.save(oldGateway); + protocolComponentRepository.save(oldComponent); } catch (Throwable e) { - throw new BizException("save protocol gateway script error", e); + throw new BizException("save protocol component script error", e); } } - @PostMapping("/deleteGateway/{id}") - public void deleteGateway(@PathVariable("id") String id) { - dataOwnerService.checkOwner(gatewayRepository, id); + @PostMapping("/deleteComponent/{id}") + public void deleteComponent(@PathVariable("id") String id) { + dataOwnerService.checkOwner(protocolComponentRepository, id); try { - gatewayRepository.deleteById(id); + protocolComponentRepository.deleteById(id); } catch (Throwable e) { - throw new BizException("delete protocol gateway error", e); + throw new BizException("delete protocol component error", e); } } - @PostMapping("/gateways/{size}/{page}") - public Paging getGateways( + @PostMapping("/components/{size}/{page}") + public Paging getComponents( @PathVariable("size") int size, @PathVariable("page") int page) { - Page gateways = gatewayRepository.findAll( + Page components = protocolComponentRepository.findAll( PageRequest.of(page - 1, size, Sort.by(Sort.Order.desc("createAt")))); - return new Paging<>(gateways.getTotalElements(), gateways.getContent()); + return new Paging<>(components.getTotalElements(), components.getContent()); } @GetMapping("/registerMqtt") diff --git a/manager/src/main/resources/application-dev.yml b/manager/src/main/resources/application-dev.yml index 2a9c0ec1..ebc395c7 100755 --- a/manager/src/main/resources/application-dev.yml +++ b/manager/src/main/resources/application-dev.yml @@ -1,4 +1,11 @@ spring: + servlet: + multipart: + enabled: true + max-file-size: 10MB + max-request-size: 12MB + upload-dir: ./component_jar + data: mongodb: uri: mongodb://填写mongodb地址/admin diff --git a/manager/src/main/resources/application.yml b/manager/src/main/resources/application.yml index 8973fa15..1b6731d8 100755 --- a/manager/src/main/resources/application.yml +++ b/manager/src/main/resources/application.yml @@ -1,4 +1,11 @@ spring: + servlet: + multipart: + enabled: true + max-file-size: 10MB + max-request-size: 12MB + upload-dir: ./component_jar + data: mongodb: uri: mongodb://填写mongodb地址/admin diff --git a/model/src/main/java/cc/iotkit/model/protocol/ProtocolGateway.java b/model/src/main/java/cc/iotkit/model/protocol/ProtocolComponent.java similarity index 71% rename from model/src/main/java/cc/iotkit/model/protocol/ProtocolGateway.java rename to model/src/main/java/cc/iotkit/model/protocol/ProtocolComponent.java index 38752ddf..e80098a1 100755 --- a/model/src/main/java/cc/iotkit/model/protocol/ProtocolGateway.java +++ b/model/src/main/java/cc/iotkit/model/protocol/ProtocolComponent.java @@ -3,9 +3,11 @@ package cc.iotkit.model.protocol; import cc.iotkit.model.Owned; import lombok.Data; import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; @Data -public class ProtocolGateway implements Owned { +@Document +public class ProtocolComponent implements Owned { @Id private String id; @@ -15,15 +17,12 @@ public class ProtocolGateway implements Owned { */ private String uid; - /** - * 用户账号ID - */ - private String uuid; - private String name; private String protocol; + private String jarFile; + private String config; private String script; diff --git a/pom.xml b/pom.xml index b9873bf3..d150113b 100755 --- a/pom.xml +++ b/pom.xml @@ -139,7 +139,7 @@ co.elastic.clients elasticsearch-java - 8.1.0 + 7.17 diff --git a/protocol-gateway/component-server/src/main/java/cc/iotkit/comps/ComponentClassLoader.java b/protocol-gateway/component-server/src/main/java/cc/iotkit/comps/ComponentClassLoader.java new file mode 100644 index 00000000..0f8cbc02 --- /dev/null +++ b/protocol-gateway/component-server/src/main/java/cc/iotkit/comps/ComponentClassLoader.java @@ -0,0 +1,30 @@ +package cc.iotkit.comps; + +import cc.iotkit.comp.CompConfig; +import cc.iotkit.comp.IComponent; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; + +public class ComponentClassLoader { + + protected Class findClass(String name) throws ClassNotFoundException { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + return (Class) classLoader.loadClass("cc.iotkit.comp.mqtt.MqttComponent"); + } + + public void addUrl(File jarPath) throws NoSuchMethodException, InvocationTargetException, + IllegalAccessException, MalformedURLException { + URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); + Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + if (!method.isAccessible()) { + method.setAccessible(true); + } + URL url = jarPath.toURI().toURL(); + method.invoke(classLoader, url); + } +} diff --git a/protocol-gateway/mqtt-component/.DS_Store b/protocol-gateway/mqtt-component/.DS_Store old mode 100644 new mode 100755 diff --git a/protocol-gateway/mqtt-component/dependency-reduced-pom.xml b/protocol-gateway/mqtt-component/dependency-reduced-pom.xml new file mode 100644 index 00000000..6278059c --- /dev/null +++ b/protocol-gateway/mqtt-component/dependency-reduced-pom.xml @@ -0,0 +1,79 @@ + + + + protocol-gateway + cc.iotkit + 0.0.1-SNAPSHOT + + 4.0.0 + mqtt-component + + + + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + + io.vertx:vertx-core + io.vertx:vertx-mqtt + + + + + + maven-compiler-plugin + + 8 + 8 + + + + + + + io.vertx + vertx-core + 4.2.6 + provided + + + io.vertx + vertx-mqtt + 4.2.6 + provided + + + org.projectlombok + lombok + 1.18.22 + compile + + + org.slf4j + slf4j-api + 1.7.32 + compile + + + cc.iotkit + common + 0.0.1-SNAPSHOT + compile + + + cc.iotkit + component + 0.0.1-SNAPSHOT + compile + + +