柿子树备忘录

vuePress-theme-reco 柿子树    2023
柿子树备忘录

Choose mode

  • dark
  • auto
  • light
首页
个人笔记
  • Web
  • GIS
  • Database
  • DevOps
  • 可视化
地图故事
生活点滴
归档
关于我
author-avatar

柿子树

109

Article

73

Tag

首页
个人笔记
  • Web
  • GIS
  • Database
  • DevOps
  • 可视化
地图故事
生活点滴
归档
关于我
  • GIS理论基础

    • GIS基础知识
    • 地图坐标系统
  • GeoServer笔记

    • 思维导图
    • 一、OGC简述

    • 二、基本使用

    • 三、服务标准

    • 四、图层加载

    • 五、服务端开发

      • GeoServer二级开发-环境配置
      • GeoServer二次开发-OWS服务(自定义模块)
      • GeoServer中的WPS服务
      • GeoServer二次开发-WPS服务
  • Openlayers

    • 思维导图
    • 一、快速起步

    • 二、ol结构体系

    • 三、数据源加载

    • 四、常用控件

    • 五、几何对象与Style样式

    • 六、事件交互

    • 七、OGC服务

    • 八、常用示例

  • CesiumJS

    • 思维导图
  • WorldWind

    • WorldWindJava 学习笔记
    • OpenGL中的坐标系

GeoServer二级开发-环境配置

vuePress-theme-reco 柿子树    2023

GeoServer二级开发-环境配置

ac 2021-04-23 GeoServer

# 1. 工具

  • jdk8:geoserver中的各模块都是指定了jdk为1.8,所以建议采用jdk8
  • maven:jar包管理
  • idea

GeoServer Development requires Java 8, Maven, and git. Due to subtle changes in Java class libraries we require development on Java 8 at this time (although the result is tested on Java 11).

官方是建议使用git来拉取geoserver的源码,这里我采用的是直接下载源码的方式。

image-20210423174254861

# 2. 构建项目

进入src目录,使用maven命令构建项目:

//-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下
mvn -DskipTests install
1
2

该命令会下载pom文件中的依赖,将项目和各模块构建到本地仓库,以及编译各模块代码。

image-20210423175414508

较旧的版本使用的仓库是Boundless Maven Repository,较新的版本是使用OSGeo Nexus Release Repository

image-20210423175448825

生成的编译文件在target目录下:

image-20210423180211319

注意:这里生成的annotaions、javacc、javacc-timestamp、jjtree-timestamp在项目中都是作为sources root资源。

# 3. 配置项目

  • 编译器使用Eclipse

    image-20210423180735102

  • 配置Maven,在IDEA中指定本地的Maven路径,确保mvn install命令打包的模块jar包在同一个仓库内。后续的开发中需要引用到源码中的模块

    image-20210425113356559

  • 修改启动参数

    image-20210423180852683

    image-20210425092340647添加一个VM Option参数-DGEOSERVER_DATA_DIR,用来指定GeoServer应用的【数据目录】;

    把Working directory修改为$MODULE_DIR$,这样各模块的工作路径为模块各自的相对路径。

    默认的【数据目录】在项目的web模块中:

    -DGEOSERVER_DATA_DIR=${PROJECT}/src/web/app/src/main/webapp/data/

  • 启动项目

    image-20210424115255719

    在浏览器中输入http://localhost:8080/geoserver可以访问刚启动的GeoServer应用。

    image-20210424120724804

# 4. 项目结构

  • platform 包的org.geoserver.platform.Service 类代表服务,提供id、版本、支持的操作等元数据的描述信息。如果两个服务的id和版本相同则会被认为是同一个服务;
  • platform 包的org.geoserver.platform.Operation 类代表某个服务下可以被请求的操作,例如GetCapabilities,这个类利用Java的反射机制;
  • ows 包的org.geoserver.ows.Dispatcher 类处理所有OWS的请求;
  • main 包的org.geoserver.catalog.Catalog 接口包含资源访问的方法,这些资源有"Layer","Layer Group","Map","Namesapce","Resource","Store","Style"和"Workspace";
  • main 包的org.geoserver.config.GeoServer 接口包含访问服务器公共配置信息的方法;

# 5. 第三方库

  • GeoTools可以说是Java语言的GIS标准包,它继承了GeoAPI,一个符合OGC简单要素访问协议(Simple Feature Access (opens new window))的Java包,提供了大量GIS操作,包括多种格式的空间数据源访问,地图渲染,空间几何操作,GeoServer的GIS部分完全使用它来实现;
  • Spring框架,GeoServer用它来构建运行时环境,通过Spring容器来管理项目的bean实例。我们会在“main”,“wcs”,“wfs”和“wms”下面看到这样一个文件applicationContext.xml,这个文件告诉spring框架需要创建哪些类实例,以及如何创建;
  • FreeMarker是一个模板引擎, 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。我们可以很容易实现对象模型与输出格式的分离,GeoServer用它来实现某些HTML文本的输出;

Figure

# 参考文章

[1] GeoServer源码解析和扩展 (一)基础篇 https://blog.csdn.net/hnzhangshilong/article/details/6822233

[2] Quickstart https://docs.geoserver.org/latest/en/developer/quickstart/index.html