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-编译打包启动的更多相关文章

  1. SpringBoot源码分析之SpringBoot的启动过程

    SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30   |   分类于 springboot  |   0 Comments  |   阅读次数 SpringB ...

  2. Envoy 源码分析--程序启动过程

    目录 Envoy 源码分析--程序启动过程 初始化 main 入口 MainCommon 初始化 服务 InstanceImpl 初始化 启动 main 启动入口 服务启动流程 LDS 服务启动流程 ...

  3. Spring源码分析专题 —— IOC容器启动过程(上篇)

    声明 1.建议先阅读<Spring源码分析专题 -- 阅读指引> 2.强烈建议阅读过程中要参照调用过程图,每篇都有其对应的调用过程图 3.写文不易,转载请标明出处 前言 关于 IOC 容器 ...

  4. php中foreach源码分析(编译原理)

    php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...

  5. k8s client-go源码分析 informer源码分析(2)-初始化与启动分析

    k8s client-go源码分析 informer源码分析(2)-初始化与启动分析 前面一篇文章对k8s informer做了概要分析,本篇文章将对informer的初始化与启动进行分析. info ...

  6. 精尽Spring Boot源码分析 - Jar 包的启动实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  7. Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析

    代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationCon ...

  8. 【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码

    Zookeeper3.7源码剖析 能力目标 能基于Maven导入最新版Zookeeper源码 能说出Zookeeper单机启动流程 理解Zookeeper默认通信中4个线程的作用 掌握Zookeepe ...

  9. [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat

    概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...

随机推荐

  1. [BZOJ1902]:[NOIP2004]虫食算(搜索)

    题目传送门 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母. 来看一个简单的例子: 43#98650#45+8468#6633=444455069 ...

  2. npm 错误记录

    npm run dev iview-weapp@1.1.0 dev /Users/Jovins/Desktop/小程序/iview-weapp gulp --gulpfile build/build- ...

  3. 使用HeapAnalyzer分析内存泄漏

    从IBM网站下载ha433包,释放,执行ha433.jar文件 https://www.ibm.com/developerworks/mydeveloperworks/groups/service/h ...

  4. python - Tkinter 模块 - python 自带的gui模块

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口,位Python的内置模块,直接import tkinter即可使用. 1.创建窗口 from Tk ...

  5. Vue知识整理11:列表渲染(v-for来实现)

    简单的v-for结构显示迭代数据 通过value别名 显示下面各个属性值 通过index 和key获取同类数组索引,或者不同属性的key属性名

  6. Selenium学习之==>三种等待方式

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  7. html的标签规范

    if/else标签{ % if condition1 %} ... display 1{ % elif conditon2 %} ... display 2{ % else % } ... displ ...

  8. 【HANA系列】SAP HANA SQL获取当前日期最后一天

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取当前 ...

  9. 【ABAP系列】SAP ABAP 行列转换的方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 行列转换的方法 ...

  10. Pager

    jQuery var Pager = function (ops) { this._ops = { count: ops.count || 0, selectedIndex: ops.selected ...