本文介绍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 webmvn 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)运行系统,点击管理组即可进入断点进行调试。
<本文完>
标签:java,geonetwork,编译,json,源码,运行,curl,es From: https://www.cnblogs.com/kk8085/p/17816921.html