开发 Maven
本文档描述了如何开始开发 Maven 本身。有一个单独的页面描述了如何构建 Maven。
找一些工作做
首先,您需要做一些事情!可以在多个 JIRA 项目中找到问题。
另一个找工作的好地方是Up for grabs列表。此列表包含相对简单的问题,无需大量先决知识即可解决。
当你发现一个你想要处理的问题时,在问题日志中添加评论,这样核心开发人员和其他正在寻找工作的人就知道有人已经在处理它了。
源头在哪里?
有关信息,请参阅https://maven.apache.org/scm.html。Maven 项目使用 Apache GitBox Repositories,所有这些都双重镜像到GitHub。
不要忘记测试!
你会发现很多单元测试。如果可能的话,创建或修改一个单元测试来演示问题,然后验证你的修复。
如果您需要模拟一个类来编写测试,请使用 Mockito 框架。部分 Maven 代码库早于 Mockito,因此您会遇到使用 EasyMock、PowerMock 和 JMock 的现有测试。但是,所有新编写的模拟都应该使用 Mockito,即使这意味着一个模块或单个类使用多个模拟框架。如果现有测试类具有复杂的遗留模拟设置,您可以在新测试类中添加新的基于 Mockito 的测试。不要求单个模型类的所有测试都必须在同一个测试类中。每个模型类有多个测试类是可以的。
如果无法在单元测试中设置问题案例,请添加集成测试。在提交补丁之前,无论如何,您都应该运行所有的集成测试。测试需要一个空的本地存储库。有关更多详细信息,请参阅核心 IT 套件文档。
创建和提交补丁
最方便的方法是从您正在使用的 Git 存储库创建一个 GitHub 分支。当你完成了一个问题或者只是想要一些关于你所做工作的反馈时,创建一个拉取请求。在提交贡献时,我们有几个准则:
- 验证Maven CI
master
上分支的状态。如果不是SUCCCESS,那就先试着找出问题所在,先别从自己的问题开始!您可以用来找出有问题的提交并帮助该提交者解决问题。git bisect
master
从,而不是从标签创建您的分支。否则,您的补丁在您创建它的那一刻就已经过时,并且可能不适用于开发负责人。- 如果这是一个没有 JIRA 问题的新作品,现在就为它创建一个 JIRA 问题。
- 以问题编号命名分支;分支名称将以
<jira-project-id>-<ticket-id>
. - 将带有提交的分支推送到您的 fork。
- 创建一个拉取请求以提交您的贡献。不久之后,有人会审查拉取请求并给你反馈。
一个简短的说明:
- 确保您遵循我们的代码风格,请参阅更多链接。
拉取请求接受标准
有许多标准可以判断拉取请求:
- 它是否有效并符合预期。这个应该很明显了吧!
- 是否符合项目精神。一些拉取请求可能会被拒绝,因为它们将项目带向与当前开发社区选择的方向不同的方向。这通常在提交拉取请求之前就某个问题进行讨论,因此如果您不确定,请先在此处或邮件列表中进行讨论。如果您不同意,请随时继续讨论(有新的理由),或在邮件列表中吸引更广泛的受众。
- 是否包含测试。预计任何与功能相关的拉取请求都将伴随单元测试和/或集成测试。也强烈希望(并且将被要求)修复错误,但不会成为不应用它的基础。至少,更改不应减少自动化测试覆盖的数量。作为一个社区,我们专注于增加当前的覆盖范围,因为有几个领域没有接受自动化测试。
- 是否包含文档。所有新功能都需要为用户记录,即使对于以后扩展的人来说非常粗糙。虽然粗糙是可以接受的,但不完整是不能接受的。与自动化测试一样,作为一个社区,我们正在努力增加文档的当前覆盖范围。
最重要的是,不要气馁。这些也是当前提交者应该相互遵守的相同要求。请记住,我们始终欢迎您的贡献!
相关项目
Maven 对其他项目有一些依赖:
- 丛
Plexus 是一个成熟的容器,支持不同类型的组件生命周期。它的原生生命周期就像任何其他现代 IoC 容器一样,使用需求和配置的字段注入。所有核心 Maven 功能都是 Plexus 组件。
您可以阅读有关 Plexus的更多信息。
- 模型
Modello 是一个简单的工具,用于表示对象模型并从模型生成代码和资源。Maven 使用 Modello 生成所有 Java 对象、XML 读取器和写入器、XML Schema 和 HTML 文档。
您可以阅读有关 Modello的更多信息。
- 魔精
对于 Maven,“Mojo”实际上是两件事:它既是Maven 的插件 API,又是一个单独的 Mojohaus 项目,其中托管着很多插件。
MojoHaus 项目是非核心 Maven 插件的插件锻造。成为该项目的一部分的门槛也较低。
子项目
- Maven Surefire
Surefire 是一个测试框架。它可以运行常规的 JUnit 测试,因此您无需更改代码中的任何内容即可使用它。它支持 BeanShell 和 Jython 中的脚本测试,并具有特殊的“电池”,用于为 Web 编写验收和功能测试以及测试 XML-RPC 代码。
您可以阅读有关 Surefire的更多信息。
- Maven Doxia
Doxia 是 Maven 的文档引擎。它有一个接收器和解析器 API,可用于插入对输入和输出文档的支持。
- Maven 单片机
Maven SCM(源代码控制管理)是一个独立于 Maven 本身的可重用 API。它由 SCM 相关的 Maven 插件使用。Maven 的核心部分不依赖于 Maven SCM。
您可以阅读有关 Scm的更多信息。
- maven旅行车
Maven Wagon 是一个处理传输文件和目录的独立 API。Maven Core 使用 Wagon API 下载和上传工件和工件元数据。站点插件使用它来发布站点。
您可以阅读更多关于 Wagon的信息。