基于JDK1.8和Maven的GeoTools 28.X源码自主构建实践

目录

前言

一、GeoTools与Jdk的版本关系

1、GeoTools与Jdk版本

2、编译环境简介

二、使用Maven编译GeoTools28.X

1、GeoTools28.x

2、Maven的完整编译

3、构建时的问题

三、总结


前言

        想要学习和掌握一个开源软件或者项目,源码是我们主要学习的内容。学习开源项目的源代码可以帮助我们提高编程技能、理解新技术,并可能为这些项目作出贡献。以下是一些建议,帮助初学者更高效地学习开源项目的源代码:首先选择合适的项目:挑选一个你感兴趣的项目,最好是使用你熟悉的编程语言和技术栈。第二步阅读文档:查阅项目的 README 文件、官方文档、Wiki 等,了解项目的背景、目标、功能和用途。第三步环境搭建:根据项目的文档,搭建本地开发环境,确保能成功编译和运行项目。第四步理解代码结构:浏览项目的目录结构,了解其组织方式,识别主要的模块和组件。第五步阅读核心代码:深入阅读核心功能的代码,了解关键算法和数据结构。可以从项目的入口点(例如 main 函数)开始,逐步跟踪代码的执行路径。当然,有的项目的入口较多,大家可以根据自己实际项目来学习。第五步Debug 和注释:使用调试工具逐步执行代码,观察程序的运行过程。在关键部分添加注释,帮助自己理解代码的逻辑。学会调试代码是学习过程中的重要环节,理解程序的运行逻辑。第六步修改和测试:尝试修改项目的某个部分,增加新功能或修复 bug。确保对现有功能没有负面影响,通过运行项目的测试用例来验证修改。在掌握代码的前提下,可以对源代码中的问题和缺陷进行修改,增加我们的参与度。第七步参与社区讨论:加入项目的邮件列表、论坛或聊天室,参与讨论,向其他贡献者请教,分享你的见解。第八步学习实践:通过实践来学习,为项目提供 bug 修复、功能改进或文档更新等贡献。提交 Pull Request,等待项目维护者的反馈和建议。第九步反复学习:不断阅读、分析和修改不同的开源项目,逐渐提高你的编程能力和对软件架构的理解。

        在进行源码学习的过程中,对源代码的编译是一个重要的环节。对源码的编译在学习过程中至关重要,有的时候我们需要进行二次开发,仅仅是需要修改程序的启动端口和配置文件。有的时候,我们需要对源代码进行修改,修复bug。在bug修复完成之后,我们都需要进行代码的编译及发布。这样才可以发布给其它的项目组或者客户来使用。

        本文以GeoTools开源项目为例,重点来讲解如何在本地离线来编译GeoTools28.X,博文首先介绍GeoTools中版本的知识,介绍GeoTools和GeoServer以及JDK的关系;然后介绍如何在JDK1.8当中来进行GeoTools的源代码来进行编译。通过文本,您可以熟悉GeoTools的版本与Jdk的依赖关系,同时掌握如何使用Maven来进行GeoTools的源码构建。

一、GeoTools与Jdk的版本关系

        在介绍如何编译GeoTools的源代码之前,我们应该先来了解一下GeoTools的版本与Jdk版本的关系。不同的GeoTools的版本应该对应什么版本的JDK,甚至于在不同的GeoServer中对应的GeoTools的版本。了解这些知识都是非常重要的。本节将重点来介绍这三者的版本对应关系。

1、GeoTools与Jdk版本

        在GeoTools的官方网站中,在软件升级的相关章节中对GeoTools与Jdk的版本对应关系进行了详细的介绍。在清单式的内容介绍中,让我们了解了其兼容情况,GeoTools的升级指南。

         截止博文编写前,GeoTools的最新版本是32.X。Oracle在2024年3月19日正式发布了JDK 22,这个版本提供了12个JDK增强建议,旨在优化Java语言并提升开发平台的性能、稳定性和安全性。此外,JDK 22引入了多个新的特性和改进,这些改进包括性能优化、模块化系统增强以及新的API和语言特性,为Java开发者提供了更加丰富的编程体验‌。

        通过GeoTools的官方升级说明可以看到以下的几条跟JDK版本相关的信息。这是在29.X的版本中提到的与Jdk版本的信息。

GeoTools 29.x

Java 11 as the minimum version

GeoTools 29.x requires Java 11 as the minimum version. If you are still using Java 8, you will have to remain on GeoTools 28.x or ealier.

        在21.x的版本中也提到了Jdk的版本信息,版本升级信息描述如下。

GeoTools 21.x

GeoTools 21 is the first is compatible with Java 8 and Java 11.

GeoTools 20.xGeoTools 20 requires Java 8.GeoTools is built and tested with Java 8 at this time, to use this library in a Java 9 or Java 10 environment additional JVM runtime arguments are required:--add-modules=java.xml.bind --add-modules=java.activation -XX:+IgnoreUnrecognizedVMOptions
These settings turn on several JRE modules that have been disabled by default in Java 9 onward.GeoTools 15.x
GeoTools 15.x requires Java 8:GeoTools 12.0
GeoTools now requires Java 7 and this is the first release tested with OpenJDK! Please ensure you are using JDK 1.7 or newer for GeoTools 12. Both Oracle Java 7 and OpenJDK 7 are supported, tested, release targets.GeoTools 9.0
Wikihttps://github.com/geotools/geotools/wiki/9.xFor background details on any API changes review the change proposals above.GeoTools 9 has resolved a long standing conflict between FeatureCollection acting as a “result” set capable of streaming large data sets vs. acting as a familiar Java Collection. The Java 5 “for each” syntax prevents the safe use of Iterator (as we cannot ensure it will be closed). As a result FeatureCollection no longer can extend java Collection and is acting as a pure “result set” with streaming access provided by FeatureIterator.

        通过上面的升级日志可以看到GeoTools与Jdk的对应关系。在GeoTools的github网站上可以看到对应关系,GeoServer版本对应关系。

GeoServerGeoWebCacheGeoToolsStableMaint.EOL*Java**Tomcat***
2.26.x1.26.x32.x2024-002024-042025-0811,178.5, 9
2.25.x1.25.x31.x2024-032024-092025-04118.5, 9
2.24.x1.24.x30.x2023-092024-042024-08118.5, 9
2.23.x1.23.x29.x2023-032023-092024-04118.5, 9
2.22.x1.22.x28.x2022-092023-042023-098,118.5, 9
2.21.x1.21.x27.x2022-052022-102023-048,118.5, 9
2.20.x1.20.x26.x2021-092022-042022-09*8,118.5, 9
2.19.x1.19.x25.x2021-032021-102022-04*8,118.5, 9
2.18.x1.18.x24.x2020-092021-042022-04*8,118.5, 9
2.17.x1.17.x23.x2020-042020-122021-02*8,118.5, 9

        从GeoTools29.X开始,Jdk的最小版本就需要使用Jdk11。如果您当前还是用Jdk8的话,请根据对应关系,使用GeoTools28.x的版本。如果您使用更老的Jdk7或者更老,请结合升级日志来使用匹配的Jdk。

2、编译环境简介

        在上一小节中,我们对版本的对应关系进行了详细的介绍。这里将对本机的编译环境包括Java和Maven的环境进行介绍。在这里仅对环境进行说明,假定您是一位熟悉Java的开发者,对于如何配置java的环境变量和Maven的安装与配置已经非常熟悉,如果您对此不是很熟悉,可以在互联网上寻找相关的资料,对相关知识进行提前学习。

        Java版本:由于个人很多的项目都是采用1.8的jdk,因此这里我们采用1.8。在Window环境中使用Java 命令来进行查看。

        使用建议,如果大家在后期要升级到更高版本的jdk,我们可以使用OpenJdk的版本进行编译,是完全没有问题的。 

        Maven 版本,在本机我们采用的Maven3.3.9版本的,使用mvn -v 命令来查看。

        以上两部分的信息非常重要,掌握不同的版本及依赖版本的对应关系,对于我们如何选择GeoTools版本来进行编译至关重要。

二、使用Maven编译GeoTools28.X

        在了解和掌握了各版本的相关知识后,我们正式使用Maven来进行源代码的编译。下面来进行详细的介绍,同时讲解在编译过程中可能遇到的问题。

1、GeoTools28.x

        GeoTools的源代码托管在Github上,大家可以从Github上下载自己需要的版本。由于我个人电脑上安装的是JDK1.8,因此我们能选择的最大的GeoTools版本就是28.X。基本上也够用了。首先我们从github的代码中心下载源码。这里我们对下载的源码进行说明。

         下面结合GeoTools的源码对各个目录进行一个简单的说明,方便大家及时的掌握源码结构,在针对性的学习时有一个参考。

序号目录说明
1build用于存放构建过程中的Java项目
2docs用于存放文档和html页面的目录
3licenses授权描述目录
4modules/libaryGeoTools的核心库
5modules/extensions存放基于核心库的扩展库
6modules/ogc存放符合OGC规范的数据结构和实现
7modules/plugins存放相关插件的目录
8modules/unsupported存放社区插件的目录
9tutorials存放教程文件的目录

        通过源代码可以看到,GeoTools是一个多模块的项目。在Maven中,多模块采用插件式组装在一起,在需要的时候,Pom文件会根据我们定义的依赖项进行组件的搭配,实现我们的需求。每个模块都有自己独立的Pom.xml文件。子模块的项目文件继承了父模块的项目文件。最上级的模块,是根模块。Geotools的模块之间有互相依赖的关系,因此第一次运行,需要完整的构建整个项目的包,进行完整的编译。下面我们进行代码的编译。

2、Maven的完整编译

        网络说明,在进行Maven构建时,请确保本地的网络是正常可以连接互联网的。因为初次构建时,Maven需要从网上下载相关的依赖包。由于是初步构建,maven拉取依赖包的时间会比较长,我本机实测,大概需要30分钟左右才编译完成。第二次构建的话,速度会提高,后续的构建在10分钟左右,本机构建实测大概11分钟。

        编译命令如下:

mvn clean install -DskipTests

        在docs命令窗口执行以上的命令后,就可以看到执行的整个过程,后面就是耐心的等待过程:

        如果是首次构建,在等待30分钟左右(视具体的网络环境而定)可以看到编辑成功的界面。 

        在控制台中看到build success的文本即表示构建成功,同时输出了编译时间、一共的耗时、编译的内存消耗。

[INFO] Process Geometry ................................... SUCCESS [  1.252 s]
[INFO] GeoJSON support (Jackson based) .................... SUCCESS [  2.194 s]
[INFO] GeoJSON Datastore .................................. SUCCESS [  1.820 s]
[INFO] GeoJSON Support .................................... SUCCESS [  2.824 s]
[INFO] MBTiles Module ..................................... SUCCESS [  3.105 s]
[INFO] GML geometry XML parsing support using StAX ........ SUCCESS [  1.129 s]
[INFO] WFS client module (NG) ............................. SUCCESS [  7.058 s]
[INFO] OGR DataStore Module ............................... SUCCESS [  0.103 s]
[INFO] Core OGR DataStore Module .......................... SUCCESS [  1.757 s]
[INFO] JNI OGR DataStore Module ........................... SUCCESS [  1.174 s]
[INFO] PostGIS Raster Plugin .............................. SUCCESS [  1.985 s]
[INFO] TPK Module ......................................... SUCCESS [  1.567 s]
[INFO] gt-cql-json ........................................ SUCCESS [  1.278 s]
[INFO] VSI Plugin ......................................... SUCCESS [  1.732 s]
[INFO] OGC CQL2 support ................................... SUCCESS [  2.950 s]
[INFO] Teradata DataStore ................................. SUCCESS [  2.215 s]
[INFO] STAC API Datastore ................................. SUCCESS [  3.734 s]
[INFO] gt-vector-mosaic ................................... SUCCESS [  1.639 s]
[INFO] Geotools Release ................................... SUCCESS [  1.572 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11:42 min
[INFO] Finished at: 2024-09-16T07:26:13+08:00
[INFO] Final Memory: 344M/1269M

        编译完成之后,我们就可以在项目中来使用这些依赖了。使用install命令后,在本地的开发仓库中就已经有了我们编译好的包,下面是一个示例:

3、构建时的问题

        在进行Maven程序构建时,可能会遇到编译失败的问题。如果在编译工程中遇到失败的情况,请检查Maven的日志输出,判断错误的原因,并修复报错信息后,重新执行mvn clean install命令重新编译即可。

在实际编译过程中,如果网络太慢,可以选择使用阿里云来进行加速。下面是几点加速编辑的方法:第一、尽量不使用Mvn clean命令。这样需要清除信息后重新构建,速度会更慢。第二、使用Maven多线程构建。第三是单个重建,不要在全部模块选择重建,这样也能加速构建。第四,尽量使用离线构建(请注意:仅当所有GeoTools的依赖包都下载到本地时使用)

三、总结

        以上就是本文的主要内容,本文以GeoTools开源项目为例,重点来讲解如何在本地离线来编译GeoTools28.X,博文首先介绍GeoTools中版本的知识,介绍GeoTools和GeoServer以及JDK的关系;然后介绍如何在JDK1.8当中来进行GeoTools的源代码来进行编译。通过文本,您可以熟悉GeoTools的版本与Jdk的依赖关系,同时掌握如何使用Maven来进行GeoTools的源码构建。行文仓促,定有许多不足之处,如有不当之处,还恳请各位专家博友在评论区留言指正,万分感谢。

博文编写过程中,参考了以下资料,在此列出:

        1、GeoServer版本对应关系。

        2、Geoserver 以及 Geotools各版本和jdk版本对照表。

        3、geotools升级。

        4、Geotools Maven编译说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427089.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC笔记

文章目录 准备MySQL数据的建立和建表 idea 建工程和模块设置属性配置文件编写JDBC代码URL的设置JDBC 代码配置文件 准备MySQL 数据的建立和建表 idea 建工程和模块 设置属性配置文件 编写JDBC代码 URL的设置 JDBC 代码 package com.yanyu;import java.sql.*; import java.util…

vue2.0+ts注册全局函数和几个递归查找

vue2.0ts注册全局函数和几个递归查找 一、main.ts 一、main.ts // 定义你的全局函数,判断是否有按钮权限 interface Item {label: string;checked: number;[k: string]: any; } // 获取按钮时候权限 function globalLable(arr: Item[], label: string): boolean {for (const i…

硬件基础知识

驱动开发分为:裸机驱动、linux驱动 嵌入式:以计算机技术为基础,软硬结合的、可移植、可剪裁的专用计算机 单片机最小单元:vcc gnd reset 晶振 cpu --- soc :system on chip 片上外设 所有的程序都是在soc(cpu&…

1.熟悉接口测试(Postman工具)

一、接口及其类型 API,应用编程接口,简称接口 通过接口,可以让程序和程序之间,能够互相交互。 接口分为两大类: 1)基于TCP全双工(适用于postman) 2)基于HTTP半双工 二、…

项目管理 | 一文读懂什么是敏捷开发管理

在快速变化的商业环境中,项目管理方式也在不断演进,其中敏捷开发管理因其高效、灵活和适应性强的特点,逐渐成为众多企业和团队的首选。本文将详细解析敏捷开发管理的定义、具体内容及其核心角色,帮助读者全面理解这一先进的项目管…

普罗米修斯监控

目录 概念 部署方法 1. 二进制(源码包) 2. 部署在k8s集群当中,用pod形式部署 概念 prometheus是开源的系统监控和告警。在k8s分布式的容器化管理系统当中,一般都是搭配prometheus来进行监控。它是服务监控系统,也…

git reflog 和 git log 的详解和区别

文章目录 1. git log 介绍基本用法:输出内容:常见选项:git log 的局限性: 2. git reflog 介绍基本用法:输出内容:git reflog 输出字段:常见选项:主要用途:示例&#xff1…

IP协议及相关特性

IP协议负责地址管理和路由选择。它的组成为: 接下来我们将对其中较重要的部分进行介绍。 4位版本:这里的四位版本只有两个取值 分别为IPv4和IPv6,这两个额分别为不同的IP协议,但是现在主流的还是IPv4但是近年来IPv6在中国的普及率…

【机器学习】OpenCV高级图像处理

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 OpenCV高级图像处理图像滤波线性滤波高斯滤波均值滤波双边滤波 非线性滤波中值滤…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector(模拟实现)

1.存储结构 https://cplusplus.com/reference/vector/vector/ namespace zone {template<class T> //需要模板class vector{public:private:iterator _start;iterator _finish;iterator _endofstorage;}; } 可见&#xff0c;vector内核是由三个指针实现的 2.默认成员函…

LabVIEW机械产品几何精度质检系统

随着制造业的发展&#xff0c;对产品质量的要求越来越高&#xff0c;机械产品的几何精度成为衡量其品质的重要指标。为了提高检测效率和精度&#xff0c;开发了一套基于LabVIEW的几何精度质检系统&#xff0c;该系统不仅可以自动化地进行几何尺寸的测量&#xff0c;而且能实时分…

高校宿舍电费管理怎么实现

1引言 在大学的象牙塔里&#xff0c;宿舍不仅是学子们休憩的港湾&#xff0c;更是青春记忆的重要载体。然而&#xff0c;随着科技的发展与生活习惯的改变&#xff0c;宿舍内的电器设备日益增多&#xff0c;电费管理成为了一个不可忽视的问题。本文将从高校宿舍电费管理的现状出…

ORA-28032 Your password has expired and the database is set to read only

做个记录。 non-cdb 处于只读状态&#xff0c;CDB创建到noncdb的dblink后产生的报错&#xff0c;dblink可以成功创建&#xff0c;但无法连接到non-cdb。 解决&#xff1a;一开始以为是cdb的密码不正确&#xff0c;mos上找到问题&#xff0c;non-cdb的密码过期了&#xff0c;并且…

【软件测试】测试的岗位有哪些?

求职入口有很多&#xff1a;相关企业官网、求职软件、校招、公众号等等。 下面就在某招聘网站上看看测试有哪些岗位吧&#xff01; 测试只是一个统称&#xff0c;在测试下面还有很多细分岗位。 但是测试的岗位主要分为以下俩个方面&#xff1a; 软件测试开发工程师&#xff…

3.ChatGPT在教育领域的应用:教学辅助与案例分享(3/10)

ChatGPT在教育领域的应用&#xff1a;教学辅助与案例分享 引言 在21世纪的教育领域&#xff0c;技术革新正以前所未有的速度改变着传统的教学和学习方式。随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;教育技术&#xff08;EdTech&#xff09;领域迎来了新的…

Vm软件安装_链接相机

工业相机的驱动连接 下载安装MVS MVS 客户端支持安装在 Windows XP/7/10 32/64bit&#xff0c;Linux 32/64bits 以及MacOS64bits操作系统上。本文以 Windows 系统为例进行介绍。 具体操作步骤如下&#xff1a; 请从海康机器人官网&#xff08;www.hikrobotics.com&#xff0…

前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)

图形验证码是网站安全防护的重要组成部分&#xff0c;能有效防止自动化脚本进行恶意操作&#xff0c;如何实现一个简单的运算图形验证码&#xff1f;本文封装了一个简单的js类&#xff0c;可以用于生成简单但安全的图形验证码。它支持自定义验证码样式&#xff0c;包括字体大小…

硬件工程师笔试面试——保险丝

目录 10、保险丝 10.1 基础 保险丝原理图 保险丝实物图 10.1.1 概念 10.1.2 保险丝的工作原理 10.1.3 保险丝的主要类型 10.1.4 保险丝的选择和使用注意事项 10.2 相关问题 10.2.1 保险丝的额定电流和额定电压是如何确定的? 10.2.2 保险丝的熔断速度对电路保护有何…

Arthas thread(查看当前JVM的线程堆栈信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.2 thread&#xff08;查看当前JVM的线程堆栈信息&#xff09;举例1&#xff1a;展示[数字]线程的运行堆栈&#xff0c;命令&#xff1a;thread 线程ID举例2&#xff1a;找出当前阻塞其他线程的线程 二、命令列表 2.1 jvm相关命令 2.…

USB摄像头视频流转RTSP流

一、VLC查看USB摄像头视频流原理&#xff1a; USB摄像头的工作原理与VLC播放其他视频文件类似&#xff0c;主要区别在于视频流的来源是实时捕获的&#xff0c;而不是预先录制的文件。如果使用VLC将USB摄像头的视频流作为RTSP服务器广播&#xff0c;需要进一步配置 二、VLC查看…