neo4j源码分析1-编译打包启动
date: 2018-03-22
title: "neo4j源码分析1-编译打包启动"
author: "邓子明"
tags:
- 源码
- neo4j
- 大数据
categories:
- 源码分析
1.打包
1.打包community
进入community,neo4j-graphdb-api,
注释掉common的:
<plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
</plugin>
里面好像涉及到了版本检查,如果某个类的最新发布版本已经没有这个方法,打包会失败,反正对打包有影响,不删除可能会失败。
还可能要在主项目的pom里面注释掉:maven-checkstyle-plugin
,代码风格检查可能会通不过。
然后用maven命令:
mvn -settings ~/opt/soft/apache-maven-3.5.0/conf/settings.xml -Dlicense.skip=true -DskipTests package install
2.打包企业版
进入enterprise,ha目录
进入management,注释掉 org.revapi
还有其他问题,比如java文件没有license,这里不一一列举。
mvn -settings ~/opt/soft/apache-maven-3.5.0/conf/settings.xml -Dlicense.skip=true -DskipTests package install
3. 打包完整的tar包
进入项目路径
mvn clean install -Dmaven.test.skip=true
要注意两个参数的异同点:
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
打包的输出文件:packaging/standalone/target/neo4j-community-3.4.0-SNAPSHOT-unix.tar.gz,这个就是我们的neo4j包。解压后,放到一个目录。一方面你可以选择执行 bin/neo4j start 启动neo4j,我们要分析源码,自然会是在本地启动。
二、运行
1.启动
我们在IDEA中,找到入口类:org.neo4j.server.CommunityEntryPoint,点击运行,然后会报错,我们需要添加运行参数:
-server --home-dir=~/neo4j-community-3.2.6 --config-dir=~/neo4j-community-3.2.6/conf
这里的参数是刚刚解压的neo4j目录和配置文件。然后运行成功,访问 http://localhost:7474/browser/,会发现有问题。
通过调试前端的js代码,我们发现版本有问题,这里我们稍作修改,找到 org.neo4j.kernel.internal.Version。最后的代码注释掉,换成我们的版本,也就是将Version.class.getPackage().getImplementationVersion() 换成 3.4,然后就可以运行成功了。
打开7474端口,写cypher语言,查看。
2.打断点调试
既然是源码分析,我们的办法就是先看,然后打断点调试,查看调用栈,但是由于是多线程,其实还是很有难度的,容易跟丢,后续我们慢慢来吧。
3.代码结构查看
看源码之前我们先大概过一下代码结构。我们主要看 community 模块的结构,里面有很多子模块。
我们可以大概根据名字猜测 :io模块是用来处理读写数据的,kernel模块是我们需要着重查看的。bolt是处理bolt连接的,server是整个项目启动的。codegen是动态生成代码的。我们要从内核部分开始看。
4.架构了解
The node records contain only a pointer to their first property and their first relationship (in what is oftentermed the _relationship chain). From here, we can follow the (doubly) linked-list of relationships until we find the one we’re interested in, the LIKES relationship from Node 1 to Node 2 in this case. Once we’ve found the relationship record of interest, we can simply read its properties if there are any via the same singly-linked list structure as node properties, or we can examine the node records that it relates via its start node and end node IDs. These IDs, multiplied by the node record size, of course give the immediate offset of both nodes in the node store file.
这段话来自(作者:IanRobinson) 一书。描述了neo4j的存储方式。详情可以查阅其他资料。
5.源码查看
参考下一篇
原文地址:http://www.k6k4.com/blog/show/aaavurkwu1547605733514
neo4j源码分析1-编译打包启动的更多相关文章
- SpringBoot源码分析之SpringBoot的启动过程
SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30 | 分类于 springboot | 0 Comments | 阅读次数 SpringB ...
- Envoy 源码分析--程序启动过程
目录 Envoy 源码分析--程序启动过程 初始化 main 入口 MainCommon 初始化 服务 InstanceImpl 初始化 启动 main 启动入口 服务启动流程 LDS 服务启动流程 ...
- Spring源码分析专题 —— IOC容器启动过程(上篇)
声明 1.建议先阅读<Spring源码分析专题 -- 阅读指引> 2.强烈建议阅读过程中要参照调用过程图,每篇都有其对应的调用过程图 3.写文不易,转载请标明出处 前言 关于 IOC 容器 ...
- php中foreach源码分析(编译原理)
php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...
- k8s client-go源码分析 informer源码分析(2)-初始化与启动分析
k8s client-go源码分析 informer源码分析(2)-初始化与启动分析 前面一篇文章对k8s informer做了概要分析,本篇文章将对informer的初始化与启动进行分析. info ...
- 精尽Spring Boot源码分析 - Jar 包的启动实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析
代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationCon ...
- 【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码
Zookeeper3.7源码剖析 能力目标 能基于Maven导入最新版Zookeeper源码 能说出Zookeeper单机启动流程 理解Zookeeper默认通信中4个线程的作用 掌握Zookeepe ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
随机推荐
- 字符串:StringBuilder()
String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) [1]String和StringBuffer String ...
- postgres select TOP X in group 查询每个组的前几名
参考: https://stackoverflow.com/questions/27415706/postgresql-select-top-three-in-each-group http://ch ...
- Tensorflow2.0变化
https://baijiahao.baidu.com/s?id=1627307436158652578&wfr=spider&for=pc https://zhidao.baidu. ...
- linq/EF 使用技巧笔记
先上图 1.linq列转行(如图从上到下,action_type即power字段),其实严格意义上来说,并不是linq,只是用了循环 List<NavigationDto> leaf = ...
- [BZOJ3796]Mushroom追妹纸:后缀自动机+KMP
分析 这道题有个\(O(n)\)的后缀自动机做法,感觉很好理解就在这说一下. 先对\(s1\)和\(s2\)求最长公共子串,对于\(s2\)的每一个下标\(i\),求一个\(f[i]\)表示以\(s2 ...
- Flume的断点续传解决
根据需求,首先定义以下3大要素 采集源,即source——监控文件内容更新 : exec ‘tail -F file’ 下沉目标,即sink——HDFS文件系统 : hdfs sink Sou ...
- sqli-labs(33)
0X01构造闭合 发现‘ 被过滤了 那么 宽字节绕过 ?id=-%df%%20union%20,database(),%
- 二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC
评价指标是针对同样的数据,输入不同的算法,或者输入相同的算法但参数不同而给出这个算法或者参数好坏的定量指标. 以下为了方便讲解,都以二分类问题为前提进行介绍,其实多分类问题下这些概念都可以得到推广. ...
- CSS注
1.css3内容上下左右居中 .box { display:-moz-box; -moz-box-pack:center; -moz-box-align:center; display:-webkit ...
- centos设置定时删除文件定时清理网站日志
1.进入linux系统 2.在任意目录创建一个sh后缀的文件,如: 3.编辑打开该文件,如图: 4.此时按键盘上的“i”键或者“insert”键,进入编辑模式 输入: #!/bin/shfind /d ...