gradle和maven_Java,Maven和Gradle中的命名约定

gradle和maven

Java哲学的一个中心方面是名称很重要
Brian Goetz,Java语言架构师和Java Concurrency in Practice的作者

配套

如果您为“ acme.com”工作,并且正在开发一个名为“ foo”的项目,则约定是您的根软件包为com.acme.foo

作为具有前瞻性的一堆 ,我们倾向于添加许多“分组”程序包。 我们的foo项目是一个实用程序库,我们可能会创建其他库,因此我们将其放入com.acme.util.foo ,以确保其他实用程序项目有空间。 如果我们确实具有前瞻性,我们将考虑foo是用于处理文本的实用程序库,因此最好将其放入com.acme.util.text.foo 。 另一方面, YAGNI

在javascript世界中,没有包,您只有一个名字foo就是这样。 我很高兴能在JVM上完成大部分工作,而不是在10天内设计和构建一个运行时,但是当我开始嵌套根包比com.acme.foo更深时,我会尽力记住所有这些用Node.js编写的大量软件完全没有任何嵌套,因此也许我可以为根软件包实现3或4个嵌套级别,而不是5或6个嵌套级别。

Maven groupId:artifactId

关于.class文件的一件好事是,您不必为其选择名称-它们从源于.java文件的1:1映射自动获得它们的名称。 不幸的是,maven要求您选择两个名称,所以不可能那么简单。 幸运的是,对于选择这些名称,maven不仅提供了一种 ,而且还提供了两种稍有不同的约定!

因此,如果您询问StackOverflow ,将会看到两个流行的答案。 当像RxJava这样的主要库发布新版本时,您需要进行长达12个屏幕的辩论,以弄清楚名称的含义。

幸运的是,那里有一个机械的答案! JitPack在https://jitpack.io上将任何git commit转换成Maven工件,我发现它比-SNAPSHOT很大的改进, -SNAPSHOT进行集成测试。 它使用的命名约定是:

  • com.github.{user}:{repo} (还有com.gitlaborg.bitbucketcom.gitee
  • com.github.{user}.{repo}:{subproject}用于多模块构建

如果您使用JitPack的自定义域集成,则可以将com.github.{user}替换为com.acme,以获得专业的联系。 即使您不使用JitPack,使用此约定也意味着您可以使用它,并且它制定了一条简单的规则,对所有这些人都适用

Gradle插件ID

在Gradle-land中,您可以应用这样的插件: plugins { id 'any.plugin.id.you.want' }

Gradle提供了一个很好的指导方针

按照惯例,我们建议您使用基于Java包的反向域模式的ID,例如org.example.greeting。

麻烦的是,到目前为止已发布的大量插件都命名为... gradle-plugin 。 在编写插件时,这似乎是合理的,并且直到您远距离使用它时,您才意识到它有多愚蠢:

plugins {
    id'com.acme.gradle.foo'
    id 'org.nonprofit.bar.bar-gradle-plugin'
    id 'beetlejuice.beetlejuice.gradle'
}

那是什么车? 那就是雪佛兰克尔维特汽车。 那是什么电话? 这是一部iPhone XS手机。 这会更好吗?

plugins {
    id'com.acme.foo'
    id 'org.nonprofit.bar'
    id 'beetlejuice'
}

有趣的是,因为Gradle给出的指导非常好-没有过多的嵌套,没有不必要的gradle.gradle ,只是最低限度。 然而,有很多谁使用它觉得还应该加上一个人的gradle或两个,以防万一。 可能唯一使我们摆脱困境的方法是使用gradle工具在id中搜索gradle并发出警告,以帮助我们在发布之前进行一些思考。

经验教训

设计名称空间是难得的机会。 我们大多数人甚至在整个职业生涯中从未做到过。 而且由于没有人有经验,所以即使在25年的Java世界中,我们仍然会犯很多新手错误。 这个很难(硬! 域名抢注, IDN同形异义词攻击有很多陷阱。 如果我最终定义了一个名称空间,我将尝试记住以下课程:

  • 命名空间有助于识别作者/维护者:com.acme.foo
  • 命名空间对于细粒度的类别来说是多余的:com.acme.util.text.foo
  • 将名称定义为其他两个名称的元组是👎
  • 如果这些名称都是foobar的插件,那么人们只会将它们命名为my-foobar-plugin,警告它们可能是\ _(ツ)_ /¯

先前发布在https://dev.to/nedtwigg/names-in-java-maven-and-gradle-2fm2

翻译自: https://hackernoon.com/naming-conventions-in-java-maven-and-gradle-hq9536kp

gradle和maven

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值