依赖插件中依赖已经存在于igserver-webapp进程中,将其设置为 provided ,因为插件可以共享框架中已存在的依赖,如果将重复的依赖加入到插件,只会增加插件的大小。igserver框架的所有依赖可将igserver-webapp-*.jar(路径:MapGIS 10\igserver_for_java\lib)解压 后查看目录BOOT-INF/lib下的jar包。依赖声明插件必须有如下依赖,其中mapgis-igs-api需要手动注册,该包位于BOOT-INF/lib下。注册命令:mvn install:install-file -DgroupId=com.zondy.mapgis.igs -DartifactId=mapgis-igs-api -Dversion=10.6.0.10 -Dpackaging=jar -Dfile=D:\mapgis-igs-api-10.6.x.x.jar
org.pf4j pf4j 3.4.0 provided org.pf4j pf4j-spring 0.7.0 provided com.zondy.mapgis.igs mapgis-igs-api 10.6.0.10 provided org.springframework spring-webmvc 5.1.20.RELEASE provided io.swagger.core.v3 swagger-annotations 2.2.0 provided jakarta.servlet jakarta.servlet-api 4.0.3 provided org.slf4j slf4j-api 1.7.30 provided 打包推荐插件打包使用maven-assembly-plugin,打包为one-jar,如下
org.apache.maven.plugins maven-assembly-plugin 3.1.0 jar-with-dependencies mapgis-plugin false false true true ${plugin.id} ${plugin.version} ${plugin.provider} ${plugin.class} ${plugin.dependencies} make-assembly package single 其中必须指定插件的属性,注意插件id必须保证唯一性,class为Plugin实现类,如果是扩展的 SpringMvc REST服务,服务承载到IGServer中时将添加/igs/rest/services/{pluginid}/ExtensionServer,示例如下
igs-demo-plugin com.xxx.server.DemoPlugin 0.0.1 MapGIS 在插件项目目录下执行mvn clean package将在target目录下生成插件文件 mapgis-plugin.jarpom.xml参考
4.0.0 com.xxx.server cxf-service-extension-test 10.6.0.10 igs-demo-plugin com.xxx.server.DemoPlugin 0.0.1 MapGIS org.pf4j pf4j 3.4.0 provided org.pf4j pf4j-spring 0.7.0 provided com.zondy.mapgis.igs mapgis-igs-api 10.6.0.10 provided org.springframework spring-webmvc 5.1.20.RELEASE provided io.swagger.core.v3 swagger-annotations 2.2.0 provided jakarta.servlet jakarta.servlet-api 4.0.3 provided org.slf4j slf4j-api 1.7.30 provided org.projectlombok lombok 1.16.2 org.apache.maven.plugins maven-assembly-plugin 3.1.0 jar-with-dependencies mapgis-plugin false false true true ${plugin.id} ${plugin.version} ${plugin.provider} ${plugin.class} ${plugin.dependencies} make-assembly package single 开发创建plugin类,即上文中的plugin.class,示例如下public class DemoPlugin extends SpringPlugin { public DemoPlugin(PluginWrapper wrapper) { super(wrapper); } @Override public void start() { log.info("DemoPlugin.start,mode:{}", wrapper.getRuntimeMode()); } @Override public void stop() { log.info("DemoPlugin.stop()"); } @Override protected ApplicationContext createApplicationContext() { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); applicationContext.setClassLoader(getWrapper().getPluginClassLoader()); applicationContext.register(SpringConfiguration.class); applicationContext.refresh(); return applicationContext; }} 创建SpringMvc Controller扩展服务实现类,添加spring的REST服务注解@RestController或 @Controller,同时必须添加注解@Extension和实现Rest扩展服务接口ControllerExtension,可选 择实现FrameworkContextCapable接口来获取框架的IOC容器,示例如下public class TestController implements ControllerExtension, FrameworkContextCapable { private ApplicationContext applicationContext; @Autowired private MessageProvider messageProvider; @Override public void setFrameworkApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @Override @Operation(summary = "服务信息") public ResponseEntity> getServiceInfo() { return ResponseEntity.ok("这是插件igs-demo-plugin提供的REST扩展服务"); } @Operation(summary = "获取结果信息") @RequestMapping(value = "/test", method = {RequestMethod.GET}) public ResObj getRes() { String msg = messageProvider.getMessage(); ResObj resObj = new ResObj(); resObj.setMessage(msg); return resObj; } }其中注解 @Tag , @Operation 为OpenApi3注解,用于生成swagger文档 上述示例REST服务的访问基地址为 http://localhost:8089/igs/rest/services/igs-demo plugin/ExtensionServer ,其中demo-plugin为插件id,IGServer自动为扩展服务添加的REST服务前 缀,接口ControllerExtension默认实现了服务自述信息方法public interface ControllerExtension extends ExtensionPoint { /** * 当前REST扩展服务的自述信息、 * 用于在IGServer服务管理中调用服务基地址时,返回的服务信息 * 开发者可根据实际需要,实现该方法,将扩展服务的详细自述信息通过该接口提供给使用者 ** @return 返回text的信息 */@GetMapping("")default ResponseEntity getServiceInfo() {return ResponseEntity.ok("这是一个基于SpringMVC的REST扩展服务:" + this.getClass().getName());}} 发布扩展服务在IGServer服务管理界面,点击服务发布-功能服务-扩展服务 选择打包生成的jar包上传即可完成扩展服务发布重启IGServer服务(扩展服务插件添加、删除后必须重启服务)访问服务请求服务基地址 http://localhost:8089/igs/rest/services/igs-demo- plugin/ExtensionServer ,将返回如下信息: 开发者也可实现接口,实现自定义的服务自述信息接口,示例如下:@Override@Operation(summary = "服务信息")public ResponseEntity getServiceInfo() {return ResponseEntity.ok("这是插件igs-demo-plugin提供的REST扩展服务");}swagger支持,访问 http://localhost:8089/webjars/swagger-ui/index.html ,可查看所有扩展服务的REST接口文档。