Apache Kafka
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.properties
或core/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
, examples
和 clients
./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报告,因为一次只能启用一个。