geonetwork源码编译与开发入门说明

发布时间 2023-11-09 09:43:43作者: 孤草之魂

本文介绍geonetwork源码编译及简单的开发修改。

本文包括源码调试的细节,主要给没怎么接触过java又想调试修改部分java代码的提供一定帮助,比如控制器或修改业务逻辑中的增删改操作等

本文使用环境:

操作系统:Windows 11

JDK版本:jdk-8u381-windows-x64.exe

Maven版本:apache-maven-3.9.4

Tomcat版本:apache-tomcat-9.0.80

Elasticsearch版本:elasticsearch-7.9.2-windows-x86_64.zip

GeoNetwork版本:core-geonetwork-4.2.6

IDE:IntelliJ IDEA 2023.2.2

快速启动步骤:
1、启动elasticsearch:bin目录下双击运行elasticsearch.bat
2、使用IDEA打开core-geonetwork,并在终端执行
  mvn clean install -DskipTests
3、运行web系统
  mvn jetty:run

1、开发环境要求

   github源码路径:https://github.com/geonetwork/core-geonetwork/tree/4.2.6

  • GeoNetwork 4.2.6是使用 Java 8 (LTS) 开发,不支持java11,也无法在 Java 7 (1.6) 或更早版本中运行

  • Web服务器:GeoNetwork 附带一个嵌入式容器Eclipse Jetty,可以更改为tomcat或其它Web容器

  • 数据库默认采用H2,可以通过配置更改为Oracle、MySQL、Postgresql等主流数据库

  • GeoNetwork 使用Maven来管理构建过程和依赖项(Maven 3.1.0+)

  • GeoNetwork 搜索引擎构建在 Elasticsearch 之上,需要先完成ES的安装

2、安装搜索引擎Elasticsearch

  • https://www.elastic.co/downloads/elasticsearch 下载 Elasticsearch 并解压缩文件(建议下载该版本官网配的es版本7.9.2,经实测8版本创建索引会报错)
  • 安装完成后运行es,浏览器输入http://localhost:9200/ 验证是否安装成功
  • 在geonetwork安装目录下找到路径.\web\geonetwork\WEB-INF\data\config\index,有三个json文件:features.json,records.json,searchlogs.json

  在命令行cd到指定目录,执行命令,根据三个json文件创建对应的索引:

  cd $GN_DATA_DIRECTORY/config/index
  curl -X DELETE http://localhost:9200/features //
删除features索引
  curl -X DELETE http://localhost:9200/records //删除records索引
  curl -X DELETE http://localhost:9200/searchlogs //删除searchlogs索引

  curl -X PUT http://localhost:9200/features -H "Content-Type: application/json" -d @features.json  //创建features索引
  curl -X PUT http://localhost:9200/records -H "Content-Type: application/json" -d @records.json //创建records索引
  curl -X PUT http://localhost:9200/searchlogs -H "Content-Type: application/json" -d @searchlogs.json  //创建searchlogs索引

  注意:

  (1)如果之前没有创建过索引,直接使用curl -X PUT创建,如果之前有创建过,需要先删除索引curl -X DELETE,然后再进行创建

  (2)如果在Windows中curl命令不可用,需要先下载,下载地址:https://curl.se/windows/ 

  (3)也可以不使用curl命令,直接使用Postman等可以执行HTTP的Put请求的工具:  

    a)选择HTTP方法为"PUT"。

    b)在请求头中,添加一个名为"Content-Type"的头,并将值设置为"application/json"。

    c)在请求体中,选择"raw"并将请求的JSON数据放在请求体中。你可以在Postman中直接输入JSON数据,或者从文件中导入它。

3、IDE环境配置

(1)打开File->Setting找到Build Tools下的Maven,修改maven的路径:

 

 (2)确认项目设置是否为java8:

 3、构建项目并运行web系统

在Idea中打开core-geonetwork文件夹,在Terminal中执行以下命令(直接通过Windows的cmd命令行,在项目的文件夹中也可以执行构建和运行web应用):

(1)整个项目构建与安装

cd core-geonetwork  //定位到指定目录
mvn clean install -DskipTests //执行清理和构建整个项目,并跳过测试
其他编译选项:
mvn clean install //不跳过测试
mvn clean install -o //离线模式下执行构建(需要确保项目的依赖项在本地存储库中可用)
mvn clean install -o -DskipTests -T 2C //在离线模式下清理项目、构建项目、跳过单元测试,并使用2个线程进行构建

构建成功后终端显示如下:

 构建完成后,本地Maven存储库包含了由GeoNetwork创建的构件(位于 $HOME/.m2/repository/org/geonetwork-opensource 目录中)

本机位于:D:\Program Files\maven\apache-maven-repository\org\geonetwork-opensource

注意:项目路径下的文件夹名称不能包含中文字符,否则会报错

 

(2) ES的构建与运行(如果独立安装了es,项目构建前先运行es,可跳过该步)

cd es  //定位到es目录
mvn install -Pes-download //激活es-download
mvn exec:exec -Des-start //启动ES

(3)运行Web应用

cd web
mvn jetty:run -Penv-dev //在开发环境(-Penv-dev)中启动Jetty Web服务器

注意:运行带上-Penv-dev参数,确保 GeoNetwork 在没有 JavaScript 缓存的情况下运行,从而允许测试对 Web 用户界面(web-ui)的更改。

运行完命令后,在浏览器输入http://localhost:8080/geonetwork ,即可访问系统。

首次运行会自动创建数据库,默认是H2数据(~/gn.mv.db和~/gn.trace.db)

本机数据库路径是:C:\Users\xxx\Documents\gn.mv.db

在项目的pom.xml文件中,可以根据实际运行情况修改以下配置:

* 如果要修改jetty的运行端口:

* 如果要修改ES的主机和端口:

如上图,修改es.host和es.port,可以更改为使用服务器部署好的es,这样本地就不用每次运行es了。

* 如果要修改数据库,如更改为PostgreSQL(默认使用h2数据库)

(4)重置所有缓存和数据库(谨慎执行)

cd web
mvn clean:clean@reset

4、配置Tomcat来运行web系统

在配置tomcat前,先确认项目配置下的Moudules和Artifacts下都有相应的配置。

(1)在run->Edit Configurations下,添加tomcat服务

 (2)配置好tomcat信息:

 (3)切换到Deploment配置输出构件(若只要运行web系统,可以在Before Launch删除Build,免得重复进行项目构建)

 (4)配置好后,通过右上角可以运行tomcat,运行系统(只是要运行系统使用三角图标,如果使用小虫子图标那个可以调试代码):

 4、调试java代码

(1)使用调试模式运行tomcat服务

(2)以用户组为例,根据F12找到服务地址

(3)找到源码:core-geonetwork/services/src/main/java/org/fao/geonet/api/groups/GroupsApi.java

在获取组中打个断点:

对应实体类:core-geonetwork/domain/src/main/java/org/fao/geonet/domain/Group.java

对应Repository接口:core-geonetwork/domain/src/main/java/org/fao/geonet/repository/GroupRepository.java

 (4)运行系统,点击管理组即可进入断点进行调试。

<本文完>