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