modern java practices

2025-12-11 0 546

读书! (这跳到Wiki)
跳到项目卡墙,查看即将到来的书籍和代码更改(卡墙跟踪该项目的问题)。

一些突出显示的文档页面:

  • 保持本地与CI一致
  • 向左移动安全性

如果您克隆这个项目

确保在github秘密中更新OWASP_API_NVD_KEY

现代Java/JVM建立实践

警告

对于使用DepentencyCheck插件进行Gradle或Maven的人来说,在7月1日的周末中,上游API获取安全性CVE的CVE更改了主要版本,并停止支持数据的较旧版本。要了解最新信息,请更新至Gradle或Maven插件的至少版本10.0.2。

更新后,第一个构建将需要很长时间,但之后应正常执行。在此更改之后的第一周左右,您可能会看到多个连接故障,因为OWASP NVD的项目都超载,所有这些都同时赶上了。随着CVE记录的拉动,Maven插件显示进度:要使用Gradle插件来查看进度,请使用--info命令行标志。

现代Java/JVM构建实践是一种使用Gradle和Maven构建现代Java/JVM项目的文章,以及Java中的首发项目(尽管详细信息可能会发生变化,但在JVM上为非Java语言的建议作品)。

重要的

有关所有页面和部分,请参见Wiki。此读数只是引言,动机和项目状态。您可以使用下面的目录快速跳到您感兴趣的位。

无论您选择哪种语言或构建工具,您都应该像您的项目源代码一样对待您的构建和管道值得您关注:如果它不像开发人员那样适合客户构建,那么您需要考虑一些东西。

我向您展示了实践和工具,可帮助您将构建和管道与您自己的源代码相同。这种非java语言的哲学的一个例子是clojure。

您的重点以及本文的重点是最佳的构建实践项目卫生,并帮助您拥有与生产相同的本地工作。该项目在Gradle和Maven之间是不可知论的:每个部分的讨论涵盖了这两个工具(字母顺序,Maven之前的Gradle)。有关自以为是的观点(不是我自己的),请参阅我对Gradle(与Maven)的最后看法

这不是JAVA的JVM启动器:我将其用于启动Kotlin项目,并替代纯净和代码质量插件。 JVM上的任何语言都可以找到实践和技巧。

笔记

ScalaClojure拥有自己喜欢的构建工具,此处不涵盖。但是,构建管道的建议和示例旨在对这些JVM语言同样有用。 Groovy和Kotlin可以直接使用示例(它们都倾向于构建工具的Gradle选项)。

作为指导,该项目的重点是:

  • 使用Gradle或Maven的JVM项目快速入门。分叉我,克隆我,自由复制/粘贴!我是Creative Commons公共领域奉献(CC0)。
  • 讨论并说明(通过代码) – 不言而喻的默认实践;突出显示良好的构建工具和插件
  • 出现的文件陷阱。互联网搜索后有些易于解决;有些人具有挑战性(请参阅“提示”部分)
  • 不要成为“多合一”解决方案。您最了解您的情况。我希望这个项目可以帮助您发现自己喜欢的改进。请通过问题或公关与他人分享

两个反复出现的主题

  • 剩下的转移问题– 在您的构建中找到早期的问题 – 在生产中看到它们之前
  • 使开发人员的生活更轻松– 自动化构建任务通常是手工完成的:在与团队共享之前,请在本地进行投诉(失败),或者在部署之前在CI中失败

这些可以作为软件供应链概括:确保从本地开发到“直接发展:自信地建造”的可靠,可信赖的软件。

但是…您必须在这里对自己的系统和流程进行判断和衡量建议。有些事情(许多或大多数事情)可能对您有用:请密切关注对您不起作用的事物。

什么是入门者

项目入门者有多个目标:

  • 帮助一个新的项目启动并跑步,以最少的大惊小怪。
  • 显示最佳实践的例子。
  • 解释为什么选择的原因,并帮助您选择最有意义的项目。

该入门项目的重点是构建

  • 易于新人们尝试自己的项目
  • 支持您的项目的新贡献者,使他们迅速提高生产力
  • 支持当前的贡献者在构建中,摆脱困境,使日常工作变得容易

这个起动器项目的依赖性很小。重点是Gradle和Maven插件和配置,因此您和贡献者可以专注于代码,而不是设置构建。

总结

  • 我不是一个很棒的程序员;我只是一个有很大习惯的好程序员。 – 肯特·贝克(Kent Beck)
  • 使其运行,使其正确,使其快速-C2 Wiki

笔记

NB – 这是一个活生生的文件。该项目经常更新以获取新的依赖性或插件版本,并改进了实践。 README.md和Wiki更新建议。这是伟大习惯的样子的一部分:您不仅仅是向开发人员和用户展示爱的爱,而且还使他们能够回馈项目并帮助他人。有关提取更新的提示,请参阅重复使用此项目

(归功于Yegor Bugayenko的优雅再读。)


尝试一下

您应该“踢轮胎”,并感觉到您想进入自己的项目并建造该项目的哪些部分。您跨越了许多项目:让我们对此有所帮助。

克隆或将该项目分配到您的机器后,请尝试对您有意义的本地构建:

$ earthly +build-with-gradle  # CI build with Earthly
$ earthly +build-with-maven  # CI build with Earthly
$ ./gradlew build  # Local-only build
$ ./mvnw verify  # Local-only build

请注意,您可以纯粹在本地或容器中运行构建?

我想说服您,在容器中运行构建会解决“它在我的机器上工作”问题,并向您展示如何为您和其他人带来的构建改进。

笔记

该项目使用NVD检查与您的依赖关系的CVE,这可能需要很长时间才能下载。您可以通过请求NVD API密钥来加快构建时间(可能需要一段时间才能获取CVES列表或更新它,并且可能没有403或404失败)。

当您请求密钥时,NVD会向您发送电子邮件以确认您的身份,然后共享API密钥网页。有关更多详细信息,请参见Shift Security

查看入门“运行”程序的作用:

Gradle和Maven(如果需要时建造后)都应打印:

 TheFoo(label=I AM FOOCUTUS OF BORG)

一个“起动器”程序是所有可能的“烟雾测试”中最简单的程序,这意味着,最小的事物只是奏效的,当您检查其他事物时,当电路燃烧1时,烟雾也许会从计算机中漂移1


最近的重大变化

(有关示例代码中的详细更改,请浏览提交日志。)

  • 从公共领域转移到CC0许可证。
  • Gradle:撞到Gradle 8.9。
  • 将大部分README.md迁移到github项目Wiki。这是分解的(14k+单词和增长)的读数为易消化部分。
  • 尘世和策略:在作者归档该项目时,取消对Batect的支持。请用于当地的集装箱构造。因此,您的本地命令行是:
    $ earthly +build-with-gradle
    # OR
    $ earthly +build-with-maven

    我将研究其他选项,并进行更新以显示这些和示例。建议保持不变:在容器中运行本地构建以进行可重复性,并让CI做同样的事情以精确地重复您的本地构建。

  • JVM:转到JDK 21。该项目没有依赖Java或JVM的近期/现代版本的示例代码;但是,在两者之间移动确实需要更改才能构建脚本和支持文件。这是使用JDK 17的最后一个提交
  • Gradle:与Gradle 8.x建造。
  • Gradle:使用testsets组插件进行集成测试,以支持本机Gradle支持。这支持Gradle 8。

目录

该项目的写作已完全移至Wiki页面。使用Wiki中的侧边栏导航浏览或跳入主题,或按照阅读顺序遵循。您还可以将“页面”旁边的Droplist控件用于字母顺序列表(包括页面中的子标题)和搜索框。

最后,Wiki页面本身就是一个回购,您可以使用git@github.com:binkley/modern-java-practices.wiki.git ,您可以为任何github wiki wiki。


贡献

参见CONTRIBUTING.md 。请提交问题或贡献拉请请求!我很想和你交谈。


学分

特别感谢我的合着者约翰·利比(John Libby)。

非常感谢:

  • 丹·瓦拉赫(Dan Wallach)进行多个电子邮件评论和有关安全性的讨论
  • 克里斯托弗·霍斯巴克克(Kristoffer Haugsbakk)
  • 山姆·加蒙
  • 谢尔盖·布哈罗夫(Sergei Bukharov)

欢迎所有建议和想法!请提交问题。 ☺

脚注

  1. 不,我只是在开玩笑。与计算机2中的“白烟”相比,亚马逊或Google或Microsoft Cloud的问题完全不同。 ↩

  2. 实际上,当电源燃烧时,这确实发生在云之前的数据中心。在触发Halon系统之前,我们急于使用灭火器。 ↩

下载源码

通过命令行克隆项目:

git clone https://github.com/binkley/modern-java-practices.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 modern java practices https://www.zuozi.net/34352.html

luaj
上一篇: luaj
jvm_book
下一篇: jvm_book
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务