Development Guide
本文档为想要构建、修改或为 GeoTools 库做出贡献的开发人员提供信息。它涵盖开发环境设置、构建过程、持续集成工作流程和发布流程。有关 GeoTools 架构的信息,请参阅 Core Architecture。
开发环境设置
要使用 GeoTools 源代码,您需要设置适当的开发环境。
先决条件
进行 GeoTools 开发需要以下内容:
Java Development Kit (JDK):
- 必需: JDK 11 (GeoTools 21.x 及更高版本)
- 可选: JDK 17 用于针对较新的 Java 版本进行测试
Apache Maven: 推荐 3.5 版本或更新版本
Git: 用于源代码管理
IDE: Eclipse、IntelliJ IDEA 或其他 Java IDE(可选但推荐)
安装 Java
GeoTools 目前需要 Java 11 进行开发。您可以使用 OpenJDK 或 Oracle JDK 发行版。
# 使用 SDKMAN(推荐)
sdk install java 11.0.20.1-tem
# 使用 apt-get
sudo apt-get install openjdk-11-jdk安装 Maven
Maven 用作 GeoTools 的构建系统。
# 使用 SDKMAN
sdk install maven
# 使用 apt-get
sudo apt-get install mavenGit 配置
在使用 GeoTools 存储库之前配置 Git:
git config user.name "Your Name"
git config user.email your.email@example.com
git config --global core.autocrlf input构建 GeoTools
获取源代码
git clone https://github.com/geotools/geotools.git
cd geotools存储库结构
基本构建
要构建整个 GeoTools 库:
mvn clean install对于更快的构建而不运行测试:
mvn clean install -DskipTests要使用所有可选模块构建:
mvn clean install -Dall并行构建
Maven 3 支持并行构建以利用多核处理器:
mvn clean install -Dall -T 2C2C 参数告诉 Maven 每个 CPU 核心使用 2 个线程。
构建单个模块
要构建特定模块:
cd modules/library/main
mvn clean install常见构建问题
内存问题: 使用
MAVEN_OPTS=-Xmx1024m增加 Maven 堆大小Windows 路径问题: Windows 上的目录删除问题通常与 Microsoft 索引服务有关
Java 版本不匹配: 确保您的环境使用正确的 Java 版本
持续集成和测试
GeoTools 使用 GitHub Actions 进行持续集成测试。CI 流程确保代码更改不会破坏现有功能。
CI/CD 工作流程
- .github/workflows/integration.yml1-77
- .github/workflows/linux_jdk11.yml1-47
- .github/workflows/linux_jdk17.yml1-47
- .github/workflows/windows.yml1-38
- .github/workflows/macos.yml1-65
- .github/workflows/qa.yml1-38
数据库集成测试
数据库集成测试验证 GeoTools 可以连接到各种数据库系统:
- PostgreSQL/PostGIS (
postgis_online.yml) - MySQL (
mysql_online.yml) - Oracle (
oracle_online.yml) - Microsoft SQL Server (
mssql_online.yml) - DB2 (
db2_online.yml) - GeoPackage (
geopkg_online.yml)
这些测试在拉取请求上执行以确保兼容性。
- .github/workflows/postgis_online.yml1-70
- .github/workflows/mysql_online.yml1-45
- .github/workflows/oracle_online.yml1-49
- .github/workflows/mssql_online.yml1-43
- .github/workflows/db2_online.yml1-42
- .github/workflows/geopkg_online.yml1-38
本地运行测试
要运行 GeoTools 的测试:
mvn test要运行特定的测试类:
mvn -Dtest=YourTestClass test对于针对数据库等在线资源的测试,使用 online 配置文件:
mvn test -Ponline发布流程
GeoTools 发布流程涉及几个步骤以确保质量和一致性。
发布工作流程
- docs/developer/procedures/release.rst1-158
- build/release/build_release.sh1-205
- build/release/publish_release.sh1-105
发布先决条件
执行 GeoTools 发布需要以下内容:
- 访问 GeoTools Git 存储库的提交权限
- 访问 Jenkins 的构建权限
- 访问 GeoTools Blog 的编辑权限
- GeoTools JIRA 的管理权限
- SourceForge 中的发布/文件管理权限
构建发布
发布构建使用 build_release.sh 脚本执行,该脚本:
- 检出适当的分支
- 更新所有文件中的版本号
- 构建发布构件
- 为发布创建标签
使用示例:
./build/release/build_release.sh -b 28.x 28.1 username email@example.com stable发布发布
publish_release.sh 脚本处理:
- 部署到 Maven 存储库
- 将构件上传到 SourceForge
使用示例:
./build/release/publish_release.sh 28.1 28.x username email@example.com创建和宣布发布说明
发布后:
- 从 JIRA 生成发布说明
- 使用发布说明创建 GitHub release
- 在 GeoTools Blog 上宣布
- 向邮件列表发送电子邮件:
为 GeoTools 做贡献
贡献工作流程
贡献指南
提交贡献时:
- 先讨论策略: 首先在开发者邮件列表上讨论您的更改
- 包含测试: 始终为您的更改包含测试用例
- 遵循约定: 遵守 GeoTools 编码约定
- 正确的提交: 使用引用 JIRA 问题的适当提交消息
- 提交拉取请求: 将您的更改作为 GitHub 拉取请求提交
- 签署 CLA: 对于非平凡的更改,提交贡献许可协议
拉取请求要求
拉取请求应该:
- 针对
main分支(回移植稍后处理) - 包含覆盖更改的测试
- 如果更改对最终用户可见,则更新文档
- 在提交消息中引用 JIRA 问题
- 呈现小而集中的更改(每个提交一个目标)
社区资源
邮件列表
用户列表: geotools-gt2-users@lists.sourceforge.net
- 用于有关使用 GeoTools 的问题
开发者列表: geotools-devel@lists.sourceforge.net
- 用于开发讨论
问题跟踪器
GeoTools 使用 JIRA 进行问题跟踪:
开发者聊天
Matrix/Gitter: https://matrix.to/#/#geotools_geotools:gitter.im
商业支持
对于有截止日期或需要专业协助的用户,可提供商业支持选项:
Camptocamp
GeoSolutions
Ian Turton, UK
构建服务器
GeoTools 代码库由构建服务器监控,该服务器在每次提交后安排编译:
本开发指南概述了使用 GeoTools 代码库的关键工具和流程。通过遵循这些指南,您将能够有效地构建、测试和为 GeoTools 项目做出贡献。