kafka源码编译

原创
半兽人 发表于: 2017-08-23   最后更新时间: 2019-04-21 01:36:49  
{{totalSubscript}} 订阅, 16,566 游览

Apache Kafka

首先,你需要安装 GradleJava

Kafka需要 Gradle 2.0 或更高的版本。

至少 Java 7,以便支持 Java 7 和Java 8。

原文地址:https://github.com/apache/kafka

首先引导并下载

git clone git@github.com:apache/kafka.git

cd kafka_source_dir
gradle

构建jar并运行它

./gradlew jar

构建源码jar

./gradlew srcJar

构建聚合javadoc

./gradlew aggregatedJavadoc

构建javadoc和scaladoc

./gradlew javadoc
./gradlew javadocJar # builds a javadoc jar for each module
./gradlew scaladoc
./gradlew scaladocJar # builds a scaladoc jar for each module
./gradlew docsJar # builds both (if applicable) javadoc and scaladoc jars for each module

运行单元/集成测试

./gradlew test # runs both unit and integration tests
./gradlew unitTest
./gradlew integrationTest

强制重新运行测试,无需变更代码

./gradlew cleanTest test
./gradlew cleanTest unitTest
./gradlew cleanTest integrationTest

运行指定的单元/集成测试

./gradlew -Dtest.single=RequestResponseSerializationTest core:test

在单元/集成测试中运行指定的测试方法

./gradlew core:test --tests kafka.api.ProducerFailureHandlingTest.testCannotSendToInternalTopic
./gradlew clients:test --tests org.apache.kafka.clients.MetadataTest.testMetadataUpdateWaitTime

使用log4j输出运行特定的单元/集成测试

clients/src/test/resources/log4j.propertiescore/src/test/resources/log4j.properties中变更log4j设置

./gradlew -i -Dtest.single=RequestResponseSerializationTest core:test

生成测试覆盖率报告

为整个项目生成覆盖率报告:

./gradlew reportCoverage

生成单个模块的覆盖范围,即:

./gradlew clients:reportCoverage

构建一个二进制的 gzipped tar 包

./gradlew clean
./gradlew releaseTarGz

如果您尚未设置签名密钥,上述命令将失败。 要绕过工件的签名,可以运行:

./gradlew releaseTarGz -x signArchives

发布文件可以在./core/build/distributions/内找到。

清除构建

./gradlew clean

在特定版本的Scala(2.11.x或2.12.x)上运行任务

请注意,如果使用2.11.11以外的版本构建jar,则需要设置SCALA_VERSION变量或者在bin/kafka-run-class.sh中更改它以运行快速启动。

您可以传递主要版本(例如2.11)或完整版本(例如2.11.11):

./gradlew -PscalaVersion=2.11 jar
./gradlew -PscalaVersion=2.11 test
./gradlew -PscalaVersion=2.11 releaseTarGz

Scala 2.12.x 需要 Java 8.

为特定的项目运行任务

这用于 core, examplesclients

./gradlew core:jar
./gradlew core:test

列出所有gradle任务

./gradlew tasks

IDE构建项目

请注意,这并不是绝对必要的(例如,IntelliJ IDEA对Gradle项目有良好的内置支持)。

./gradlew eclipse
./gradlew idea

eclipse任务配置使用${project_dir}/build_eclipse作为Eclipse的构建目录。 Eclipse的默认构建目录(${project_dir}/bin)与Kafka的脚本目录冲突,我们不使用Gradle的构建目录来避免这个问题。

为所有的Scala版本和所有项目构建jar

./gradlew jarAll

运行所有scala版本和所有项目的单元/集成测试

./gradlew testAll

为所有scala版本构建二进制发布gzipped tar包

./gradlew releaseTarGzAll

将所有版本的Scala和所有项目的jar发布到maven

./gradlew uploadArchivesAll

请注意这个工作,你应该创建/更新${GRADLE_USER_HOME}/gradle.properties (通常, ~/.gradle/gradle.properties)并分配以下变量:

mavenUrl=
mavenUsername=
mavenPassword=
signing.keyId=
signing.password=
signing.secretKeyRingFile=

将流快速启动原型artifact发布到maven

对于Streams原始项目,不能使用gradle上传到maven; 而需要在quickstart文件夹中调用mvn deploy命令:
cd streams/quickstart
mvn deploy

请注意,为此,您应该创建/更新用户maven设置(通常为${USER_HOME}/.m2/settings.xml)以分配以下变量

<settings xmlns="https://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="https://maven.apache.org/SETTINGS/1.0.0
                       https://maven.apache.org/xsd/settings-1.0.0.xsd">
...                           
<servers>
   ...
   <server>
      <id>apache.snapshots.https</id>
      <username>${maven_username}</username>
      <password>${maven_password}</password>
   </server>
   <server>
      <id>apache.releases.https</id>
      <username>${maven_username}</username>
      <password>${maven_password}</password>
    </server>
    ...
 </servers>
 ...

将jar安装到本地的Maven存储库

./gradlew installAll

构建测试jar

./gradlew testJar

确定如何添加传递依赖关系

./gradlew core:dependencies --configuration runtime

确定是否可以更新依赖关系

./gradlew dependencyUpdates

运行代码质量检查

我们经常运行两个代码质量分析工具,findbugs和checkstyle。

Checkstyle

Checkstyle在kafka执行一致的编码风格。可以使用以下方式运行checkstyle:

./gradlew checkstyleMain checkstyleTest

checkstyle警告将在子项目构建目录中的“reports/checkstyle/reports/main.html”和“reports/checkstyle/reports/test.html”文件中找到。也会打印到控制台。 如果Checkstyle失败,构建将失败。

Findbugs

Findbugs使用静态分析来查找代码中的错误。您可以使用以下命令运行findbugs:

./gradlew findbugsMain findbugsTest -x test

findbugs警告将在子报表生成目录中的“reports/findbugs/main.html”和“reports/findbugs/test.html”文件中找到。 使用-PxmlFindBugsReport = true生成XML报告,而不是HTML。

常见的构建选项

应使用-P开关设置以下选项,例如./gradlew -PmaxParallelForks=1 test

  • commitId:如果构建目的添加了本地提交,则将build commit ID设置为.git/HEAD可能不正确。
  • mavenUrl: 设置maven部署存储库的URL(file://path/to/repo可用于指向本地存储库)。
  • maxParallelForks: 限制每个任务的最大进程数。
  • showStandardStreams: 在控制台上显示测试JVM的标准错误和标准错误。
  • skipSigning: 跳过artifacts的签名。
  • testLoggingEvents: 单元测试事件要记录,用逗号分隔。 例如./gradlew -PtestLoggingEvents=started,passed,skipped,failed test
  • xmlFindBugsReport: 启用findBugs的XML报告。同时会禁用HTML报告,因为一次只能启用一个。
更新于 2019-04-21

查看kafka更多相关的文章或提一个关于kafka的问题,也可以与我们一起分享文章