微软全力拥抱 Java !

来源:CSDN(ID:CSDNnews)

虽然一直以来,微软的不少产品在很多层面都有使用 Java 语言,但近日其官网上的一则「Microsoft is committed to the success of Java developers」(微软致力于 Java 开发者的成功)的公告正式吹响了微软全面拥抱 Java 的号角。

对此,我们也不禁好奇,继构建 C#、.NET、TypeScript、Visual BASIC、JScript 等语言之外,微软为何要大费周章地再去深入 Java?在本文中,我们将从近年来微软的种种足迹中探寻原因。

微软对 Java 的最新动作

在这篇公告中,微软开发者部总裁潘正磊(Julia Liuson)表示,“作为一家公司,我们致力于使 Java 开发人员尽可能地高效和高产。这一承诺意味着开发者能够在任何操作系统上使用任何工具、框架和应用服务器。”

为此,微软推出了一个专门针对 Java 所有相关内容的新网站(developer.microsoft.com/java),该网站提供了微软 Java 云开发团队的最新内容以及技术文档、工具、资源、教程、视频和代码示例。

除此之外,微软也在工具方向增加了对 Java 的诸多支持,其中,在新版本的 VS Code 中带来了更多 Spring 相关的新功能更新,譬如:

  • 其一,增加了查看实时进程中的 Spring Bean 属性。

如果没有 IDE 的支持,开发者必须编写代码来获取 ApplicationContext 和调用 .getBeanDefinitionNames() 才能得到同样的结果。比如说:

System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames());

在添加了这一功能之后,VS Code 可以展现 Bean 的属性信息,即它们是否是 Singleton、prototype 等,同时还可以用“defined”来标记自己的 Bean,以保持事情的条理性。

  • 其二,更好的 Spring 入门体验。

通过让 IDE 自动加载 Initializr 的 HELP.md 文件,为使用 Spring Initializr 初始化的项目提供了更好的启动体验。事实上,HELP.md 包含了有用的信息,但过去大部分开发者都忽略了它的存在,如今随着这一功能的改进,方便开发者上手。

  • 其三,Java Project Explorer 集成了 Maven 和 Gradle

有点像 Intellij,微软加强了 VS Code,使其更容易访问最频繁的构建操作,如访问访问 POM 或调用 Maven。

与此同时,微软并没有把对 Java 和 Spring 的支持局限于 VSCode,它还加强了对 Intellij 和 Azure 的支持。

微软与 Java 的爱恨情仇

当然,以上仅是微软近段时间为扩建自己的 Java 生态版图所做的一些工作。其实,微软对拿下 Java 开发者的“野心”也非一两天之间才有的。

如果说曾经依靠 Windows 构建起生态帝国的微软不可一世,从藐视开源、嫌弃 Linux,再到开源、数字化浪潮下的“微软爱 Linux”并稳居开源贡献榜单的 Top 之列,那么,它对 Java 的态度也有这样的一个转变过程。

在 Java 诞生的第二年,一群有敏锐的前瞻意识的人发现了这门语言的潜力,其中就包括了来自微软的专家们。时任微软 CEO 的比尔·盖茨也曾评价道,“Java 是很长时间以来最优秀的程序设计语言。”

在此趋势之下,微软在 1996 年 3 月与还没有被 Oracle 收购的 Sun Microsystems 签订了一份 Java 许可协议。可以说,微软应用 Java 的这一举措也极大地推动了 Java 自身的普及与发展。不过,好景并不长。

在 1996 年 9 月的某一天,微软浏览器部门主管向时任微软 CEO 的比尔·盖茨详细解释了 Java 给微软带来的威胁,并恳切提醒道:“Java 绝不仅仅是一种语言,它是 COM 的替代者(COM 即 Componet Object Model,在 Windows 中大量使用的编程模型)!”

随即,比尔·盖茨给当时身为微软 CTO 的 Nathan Myhrvold 发了一封主题为“Java 运行时成为操作系统”的邮件,并表示“我很担心 Java/Javabean 和其运行时到底会发展成怎样、会让多少人兴奋。我真的在这个问题上失眠了,因为随着转向更多基于服务器的应用程序,似乎会让人们易于使用我们竞争对手的操作系统。”

为了降低这样的焦虑,微软研发了一款 Java 集成开发环境,使用的语言是 J++。一定程度上可以将 J++ 视为是 Java 的一个变种,其语法、关键字等都与 Java 有异曲同工之处。

这样有些“擦边球”的行为,引发了 Sun 公司的注意。于是,1997 年 11 月,Sun 公司以违反合同为由对微软提起诉讼,指控微软分发了与 Sun 不兼容的 Java 版本。Sun 于 1998 年 5 月修改了其诉讼书,添加了不正当竞争和侵犯版权的指控。

彼时 Sun 在法庭上辩称,微软将 Java 的“一次编写,随处运行”功能视为对 Windows 的威胁,因为 Java 降低了软件开发人员为微软操作系统编写程序的动力。据 Sun 公司称,微软发布的 Java 版本与其 Windows 软件配合得更好。Sun 的律师表示,这样的举动威胁到 Java 提供跨平台开发环境的能力。

微软强烈否认有任何不当行为,并坚称它坚持与 Sun 签订的许可协议。该公司辩称,微软对 Java 所做的任何更改都只是允许开发人员利用 Windows 特有的功能。

历经三年之后,在 2001 年 1 月,两家达成和解,最终以微软同意向 Sun Microsystems 支付 2000 万美元,并且永久禁止在其产品上使用“Java 兼容”商标。不过,此时的微软还可以继续提供采用 Sun 开发的 Java 技术的现有产品,但这一场官司也让微软有了其他的想法。

在这一年的 7 月,微软宣布开始在 Windows XP 系统中不再支持 Sun 的 JVM,从而扶持自家的 .NET 平台,与 Java 分庭抗礼。

为什么此时要对 Java 展开攻势?

那要问微软为何要在时下再次拥抱 Java,根据微软官方的解释是,「如今,越来越多的 Java 开发者正在考虑如何将现有的 Java 应用程序迁移到云中,或者如何构建新的云原生应用程序。我们一直在努力让您更轻松地使用您喜欢的工具和框架将 Java 应用程序迁移到云中。然后,您可以使用您已经了解和信任的相同应用程序服务器和开源技术轻松部署和扩展。」

多年来,Java 已经积累了庞大的开发者群体,且有数以万计的设备使用 Java。在云时代下,微软在产品研发过程中也添加了对 Java 的高度支持。

除了在上文提到了的 VS Code 之外,微软在 Intellij IDEA、GitHub、Playwright、Apache Maven、Gradle 等工具方面,以及在某些产品上都有 Java 的身影。

如微软在搜索引擎 Bing 中的支持 Windows 开始菜单中的搜索功能,便是使用 Java 来执行与索引相关的功能,同时 Bing 横跨 50,000 多台服务器上有数十万个 JVM。

在 2019 年 8 月,微软收购了一家主营业务是 Java 性能优化的公司——jClarity。2021 年,时间点有些巧合的是,彼时 4 月 5 日,美国最高法院在 Google 与 Oracle 之间关于在 Android 使用 Java 的诉讼案中,最终判定 Google 开发 Android 使用的 Java API 代码合理。次日,与此事没有任何关系的科技巨头微软便推出了自家的 JDK 项目 Microsoft Build of OpenJDK 版本。

来源:https://cdn.graph.office.net/prod/media/java/infographic-evolution-of-java-at-microsoft.pdf?v={1/string}

整体而言,微软此举一方面是想要在 Java 的市场中站稳脚跟,另一方面根据官方发布的 Java 演进图显示,微软在自己的基础设施中大量使用 Java,特别是它的 Azure 生态系统(Azure Spring Cloud、Azure App Service、Azure Functions、Azure Kubernetes),为此它需要有自己的统一和通用的构建方式。

再者,正如 i-programmer 评价道,“微软此举还有将 Azure 推给 Java 开发者的宣传动机,微软试图引诱他们,甚至通过提供免费课程帮助他们迁移他们的应用程序。”

不过,归根究底,对开发者而言,也是一个不错的消息。

参考资料:

https://www.infoworld.com/article/2074908/sun-microsoft-settle-java-lawsuit.html

https://www.i-programmer.info/news/80-java/15701-microsoft-goes-all-out-on-java.html

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取

推荐阅读

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

点击领取2022最新10000T学习资料

原文地址:https://cloud.tencent.com/developer/article/2113929

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 连接 连接池产生原因 连接池实现原理 小结 TEMPERANCE:Eat not to dullness;drink not to elevation.节制
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 一个优秀的工程师和一个普通的工程师的区别,不是满天飞的架构图,他的功底体现在所写的每一行代码上。-- 毕玄 1. 命名风格 【书摘】类名用 UpperCamelC
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个人在用”。哪怕只是throw了一个新的Exception。哈哈,这是我犯的错误。一、接口和抽象类类,即一个对象。先抽象类,就是抽象出类的基础部分,即抽象基类(抽象类)。官方定义让人费解,但是记忆方法是也不错的 —包含抽象方法的类叫做抽象类。接口
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket一、引子文件,作为常见的数据源。关于操作文件的字节流就是 —FileInputStream&FileOutputStream。
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。交流QQ群:【编程之美 365234583】http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_Aonqz
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object)。用来干什么?Java 线程(也称 JVM 线程)是 Java 进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。 Ja
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket在面向对象编程中,编程人员应该在意“资源”。比如?1String hello = "hello"; 在代码中,我们
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 《程序兵法:Java String 源码的排序算法(一)》 文章工程:* JDK 1.8* 工程名:algorithm-core-le
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 目录 一、父子类变量名相同会咋样? 有个小故事,今天群里面有个人问下面如图输出什么? 我回答:60。但这是错的,答案结果是 40 。我知错能改,然后说了下父子类变
作者:泥瓦匠 出处:https://www.bysocket.com/2021-10-26/mac-create-files-from-the-root-directory.html Mac 操作系统挺适合开发者进行写代码,最近碰到了一个问题,问题是如何在 macOS 根目录创建文件夹。不同的 ma
作者:李强强上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。一、引子在Java世界里,99%的工作都是处理这高层。那么二进制,字节码这些会在哪里用到呢?自问自答:在跨平台的时候,就凸显神功了。比如说文件读写,数据通信,还
1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程表示一个运行中的线程,通过其他线程调用了该线程的 方法,使得该线程中断标志位属性改变。 深入思考下,线程中断不是去中断了线程,恰恰是用来通知该线程应该被中断了。具体是一个标志位属性,
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketReprint it anywhere u want需求 项目在设计表的时候,要处理并发多的一些数据,类似订单号不能重复,要保持唯一。原本以为来个时间戳,精确到毫秒应该不错了。后来觉得是错了,测试环境下很多一
纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 纯技术交流群 每日推荐 - 技术干货推送 跟着泥瓦匠,一起问答交流 扫一扫,我邀请你入群 加微信:bysocket01
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocketReprint it anywhere u want.文章Points:1、介绍RESTful架构风格2、Spring配置CXF3、三层初设计,实现WebService接口层4、撰写HTTPClient 客户
Writer :BYSocket(泥沙砖瓦浆木匠)什么是回调?今天傻傻地截了张图问了下,然后被陈大牛回答道“就一个回调…”。此时千万个草泥马飞奔而过(逃哈哈,看着源码,享受着这种回调在代码上的作用,真是美哉。不妨总结总结。一、什么是回调回调,回调。要先有调用,才有调用者和被调用者之间的回调。所以在百
Writer :BYSocket(泥沙砖瓦浆木匠)一、什么大小端?大小端在计算机业界,Endian表示数据在存储器中的存放顺序。百度百科如下叙述之:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加
What is a programming language? Before introducing compilation and decompilation, let's briefly introduce the Programming Language. Programming la
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:BYSocketFaceBook:BYSocketTwitter :BYSocket泥瓦匠喜欢Java,文章总是扯扯Java。 I/O 基础,就是二进制,也就是Bit。一、Bit与二进制什么是Bit(位)呢?位是CPU
Writer:BYSocket(泥沙砖瓦浆木匠)微博:BYSocket豆瓣:BYSocket一、前言 泥瓦匠最近被项目搞的天昏地暗。发现有些要给自己一些目标,关于技术的目标:专注很重要。专注Java 基础 + H5(学习) 其他操作系统,算法,数据结构当成课外书博览。有时候,就是那样你越是专注方面越