General Development

OpenTSDB 的布局不像典型的 Java 项目,而是有点像 C 或 C 环境。此页面旨在帮助想要修改 OpenTSDB 并向社区提供更新的人们。

Build System

构建系统几乎与开发人员一样多,因此无论选择哪种系统或布局,都无法满足所有人。 Autotools 和 GNU Make 在早期就被选择用于 OpenTSDB,因为它们具有灵 Active,可移植性,尤其是速度和流行用法。这不是最简单的配置,但是对于我们的需求而言,这实际上并不是太困难。我们将在下面阐明您需要更改的内容,并为想要设置环境的 IDE 用户提供提示。请注意,构建脚本现在可以编译一个pom.xml文件,以便使用 Maven 进行编译,并且正在进行工作以提供更好的 Maven 支持。但是,如果添加或删除类或依赖项等,则仍必须修改Makefile.am

Building

OpenTSDB 是使用标准./configure && make模型构建的,该模型是许多开源项目最常用的模型。从 Git 检出的新工作副本必须首先是./bootstraped

另外,您可以运行一个build.sh脚本,该脚本可以帮助您完成所有步骤。您可以在参数中为其指定 Make 目标,例如./build.sh distcheck(默认目标是all)。

Build Targets

如果未传递任何参数,则build.sh脚本将为前端 GUI 编译 JAR 和静态 GWT 文件。其他参数包括:

  • 检查 -执行单元测试并报告结果。您可以通过test_SRC=<path>指定在特定文件中执行检查,例如./build.sh check test_SRC=test/uid/TestNoSuchUniqueId.java

  • pom.xml -编译 POM 文件以使用 Maven 进行编译。

  • dist -下载依赖项,编译 OpenTSDB 并创建用于分发的 tarball

  • distcheck -与 dist 相同,但也运行单元测试。这应该在发出拉取请求之前运行,以验证所有操作是否正确执行。

  • debian -编译 OpenTSDB 并生成 Debian 软件包

添加依赖关系

请尽量不要。我们对依赖项非常挑剔,在开始依赖新库之前,需要进行代码审查。我们的目标也不是重新发明轮子,但我们非常注意引入的依赖库的数量和质量。如果绝对必须添加新的依赖关系,请执行以下步骤:

  • 查找规范源以下载相关的 JAR 文件

  • third_party/下找到或创建正确的目录

  • 在该目录中,创建一个<depdencency>.jar.md5文件

  • 将整个 jar 的 MD5 哈希值粘贴到该文件中并保存

  • 创建或编辑include.mk文件,然后从另一个目录的文件复制 Headers 信息

  • 添加一个<DEPENDENCY>_VERSION := <version>例如JACKSON_VERSION := 1.9.4

  • 添加<DEPENDENCY> := third_parth/<DIR>/<dependency>$(<DEPENDENCY>_VERSION).jar行,例如JACKSON_CORE := third_party/jackson/jackson-core-lgpl-$(JACKSON_CORE_VERSION).jar

  • <DEPENDENCY>_BASE_URL := <URL>的格式添加规范的源网址,例如JACKSON_CORE_BASE_URL := http://repository.codehaus.org/org/codehaus/jackson/jackson-core-lgpl/$(JACKSON_VERSION),请注意,JAR 名称将附加到 URL 的末尾

  • 添加以下行

$(<DEPENDENCY>): $(J<DEPENDENCY>).md5
set dummy ``$(<DEPENDENCY>_BASE_URL)`` ``$(<DEPENDENCY>)``; shift; $(FETCH_DEPENDENCY)

e.g.

$(JACKSON_CORE): $(JACKSON_CORE).md5
set dummy ``$(JACKSON_CORE_BASE_URL)`` ``$(JACKSON_CORE)``; shift; $(FETCH_DEPENDENCY)
  • 添加第THIRD_PARTY += $(<DEPENDENCY>)行,例如THIRD_PARTY += $(JACKSON_CORE)

  • 接下来,返回third_party/目录,编辑include.mk文件,如果您为依赖项添加了新目录,请在正确的字母位置插入对.mk文件的引用。

  • 修改Makefile.am

  • 找到tsdb_DEPS = \

    • 将您的新依存关系以$(<DEPENDENCY>)的正确字母 Sequences 添加,例如$(JACKSON_CORE>。请注意,如果将其放在列表的中间,则必须以换行符\结尾。如果您的依赖项放在末尾,请不要添加反斜杠。

Note

如果依赖项仅用于单元测试,则将其添加到test_DEPS = \列表中

  • 在文件中找到pom.xml: pom.xml.in Makefile

  • 添加 sed 行,例如-e 's/@<DEPENDENCY>_VERSION@/$(<DEPENDENCY>_VERSION)/' \,例如-e 's/@JACKSON_VERSION@/$(JACKSON_VERSION)/' \

Note

单元测试依赖项以及常规项都在这里

  • 修改pom.xml.in

  • 找到<dependencies> XML 部分

    • 复制并粘贴现有的依赖项部分,然后为您的变量进行修改
  • 现在,通过./build.sh运行一个构建,并验证它是否获取了您的依赖关系并且构建没有错误。 *然后运行./build.sh pom.xml来验证 POM 是否正确编译,并运行mvn compile来验证 Maven 构建正确地工作。

添加/删除/移动类

这比处理依赖性要容易得多。您只需要修改Makefile.am并编辑tsdb_SRC := \test_SRC := \列表。如果要添加一个类,请将其放在正确的字母位置并说明正确的目录和类名称。它区分大小写,因此请确保正确无误。如果要删除类,只需删除该行即可。如果要移动类,请添加新行并删除旧行。请小心处理行连续\反斜杠。每个列表中的最后一个类不应以反斜杠结尾,其余的都需要反斜杠。

编辑后,使用./build.sh进行重建,并验证是否正确编译了您的类。

IDEs

尽管 OpenTSDB 具有非 Java 标准的目录布局,但许多开发人员仍使用 IDE 来处理 Java 项目,但使用 IDE 却很容易。尽管它们应该与其他环境一起使用,但是这里有一些启动和运行 Eclipse 的步骤。本示例假定您使用的是 Eclipse。

  • 将 GIT 存储库克隆到诸如/home/$USER/opentsdb的位置

  • 从目录中使用./build.sh构建仓库

  • 启动 Eclipse 或您最喜欢的 IDE

  • 创建一个名称类似于opentsdb_dev的新 Java 项目,以使其在/home/$USER/opentsdb_dev中结束

  • 您的 dev 目录现在应该有一个./src目录

  • ./src下创建一个net目录,以便拥有./src/net(某些 IDE 可能会创建./src/java目录,因此请添加./src/java/net)

  • ./src/net/opentsdb创建到 GIT 存储库./src目录的符号链接。例如。 ln -s /home/$USER/opentsdb/src /home/$USER/opentsdb_dev/src/net/opentdsb

  • 另外,在./src下创建一个tsd目录,以便您拥有./src/tsd

  • ./src/tsd/client创建到 GIT 存储库./src/tsd/client目录的符号链接。例如。 ln -s /home/$USER/opentsdb/src/tsd/client /home/$USER/opentsdb_dev/src/tsd/client

  • 如果您的 IDE 没有,请在 dev 项目文件夹下创建一个./test目录。这将用于单元测试。

  • ./test下添加一个net目录,以便您拥有./test/net

  • ./test/net/opentsdb创建到 GIT 存储库./test目录的符号链接。例如。 ln -s /home/$USER/opentsdb/test /home/$USER/opentsdb_dev/test/net/opentsdb

  • 在 Eclipse 中刷新目录列表,您应该看到所有源文件

  • 右键单击 SRC 下的net.opentsdb.tsd.client软件包,然后从菜单中选择Build Path,然后选择Exclude

  • 现在,通过单击项目->属性,单击Java Build Path菜单项,然后单击Add External JARs按钮来添加下载的依赖项。

  • 对构建脚本下载的每个依赖项执行此操作

  • 将文件./build/src/BuildData.java从 GIT 存储库中复制,并在构建后复制到您的./src/net/opentsdb/目录中

  • 现在单击运行(或调试)->Management 配置

  • 在 Java 应用程序下,右键单击并从弹出菜单中选择“新建”。

  • 在[主要]标签下,浏览至您的opentsdb_dev专案

  • 对于主类,搜索net.opentsdb.tools.TSDMain

  • 在“参数”下,添加运行时参数以选择 Zookeeper 仲裁以及静态和缓存目录

  • 运行或调试它,并希望它能工作

  • 现在进行编辑,当您准备发布更改时,请遵循上述有关修改构建系统的说明(如有必要),发布到您自己的 GitHub 派生,并发出拉取请求。

Note

这不会编译 GWT UI。如果要进行 UI 工作并进行更改,请重新编译 OpenTSDB 或从 IDE 将其导出为 JAR,然后执行以下命令(假定上面的目录结构):

java -cp ``<PATH_TO>gwt-dev-2.4.0.jar;<PATH_TO>gwt-user-2.4.0.jar;<PATH_TO>tsdb-1.1.0.jar;/home/$USER/opentsdb/src/net/opentsdb;/home/$USER/opentsdb/src`` com.google.gwt.dev.Compiler -ea -war <PATH_TO_STATIC_DIRECTORY> tsd.Queryui