本文章为翻译稿,原文请看:http://hadihariri.com/2013/12/29/jvm-minimal-survival-guide-for-the-dotnet-developer/
本文同时是对我这篇文章的补充:http://www.jianshu.com/p/0cd7678fd9bb
目标读者
本指南主要针对.NET开发人员,因为与.NET进行了很多比较。实际上URL仍然表明它。话虽如此,我希望它对于也是Java平台新手的非.NET开发人员来说也是有用的。
基础
Java语言 Java生态系统 Java的JVM
他们是不同的。一个是编程语言(类似C#),另一个是生态系统(ecosystem)(类似.NET)不幸的是,似乎Java通常用于指所有三个。我不喜欢Java作为一种语言,但Java生态系统非常活跃,并且正在发生大量的创新。实际上,作为.NET开发人员,您可能熟悉NHibernate,NUnit,NLog,NAnt等库,这些库源自Java生态系统(drop the N)。
多语言平台
我们可以将JVM视为CLR。两者都是为多种语言提供平台的虚拟机。他们有差异,但是支持多种语言。而在CLR,我们大多使用C#,VB.NET和F#,在JVM上有Java, Scala, Clojure, Ceylon, Groovy, JRuby和Kotlin等等。(在我这篇文章中,就使用了Kotlin)
JVM 字节码
JVM字节码是基于JVM的语言编译为在JVM上运行。它类似于.NET中的IL。
跨平台
JVM是100%的跨平台。除了Windows,OSX和Linux之外,它还运行在许多其他类型的设备上。
JVM实现,版本和版本
JVM有多个实现版本。最常见的是Oracle和OpenJDK。甚至有一个称为IKVM.NET的.NET实现版本。
编辑器和版本
这可能是本指南中最复杂的部分。令人惊奇的是,您可以如命名/版本控制一样简单。这甚至使微软的产品命名看起来不错。
Editions
JRE - Java Runtime Environment. 这是用于运行JVM应用程序。您只能通过这种方式开发在JVM上运行的应用程序。
Java SE (JDK) - Java Standard Edition. 也称为JDK。这是您在JVM上开发应用程序所需的最低要求。
Java EE - Java Enterprise Edition. 名字已经非常清楚地说明了。这就是您所有的Enterprisey的东西,如分布式,大规模的应用程序。是的,不能更模糊。它包括Java SE。
Java ME - Java Micro Edition. 这是一个较小的子集,专注于手机和较小的设备。这就像.NET Micro Framework。
JavaFX- Swing的替代,它是/是Java中的主要GUI工具包。另外(虽然有争议的话题)也是针对RIA的。好像HTML / JS / CSS不够好吗?
你可以推断,所有的Java XY都是JDK的。
点击此处查看更多。
Versions
目前发布的Java版本是8。想要查看您安装的Java版本,请输入:
java -version
你会得到这样的东西:
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
但是为什么显示的是1.8.0呢。其实,这里Java8意味着减去前面的1,所以同样的1.5表示Java 5. 1.6是Java 6. 1.7是Java 7。
安装Java
可以参考一下:http://www.jianshu.com/p/4a90505e448c
应用程序输出a.k.a工件(Application Output a.k.a Artifacts)
在.NET以及本地应用程序中,编译时通常会得到可执行文件和/或一系列DLL。使用Java,您可以在输出文件夹中获取一堆.class文件。每个类文件通常对应于Java类(当编译Java语言或编译为字节码时遵循约定的其他语言)。这些类是JVM字节码,它类似于CLR上的IL。
JAR文件
与其创建很多个类文件,不如创建一个JAR,它只不过是.class文件的压缩版本。您可以使用自己喜爱的工具创建JAR文件,或者直接运行:
jar cf jar-file input-file(s)
jar附带JDK(/ bin文件夹)。
WAR文件
WAR文件是由Sun创建的Web应用程序的JAR文件。它包含一堆类文件和一些额外的元数据和文件夹,其中包含诸如TomCat之类的Web服务器的信息。
运行Java应用程序
任何具有主类的Java应用程序都可以从命令提示符运行。类型:
java <class_containing_main_method>
你必须从.class文件的文件夹运行它。
类路径
运行应用程序时,JVM将查找当前文件夹中所有必需的依赖项,然后查找CLASSPATH环境变量,该变量指向包含.class文件或JAR / ZIP的一个或多个文件夹。您可以全局设置CLASSPATH环境变量,然后由Java使用它,或者在运行应用程序时将其作为命令行参数传递:
java <class_containing_main_method> -cp <class_path>
每个条目都用冒号分隔。
构建工具
在.NET中,有许多的构建工具例如MS Build, NAnt, Albacore, Fake 等等。而JVM也没有落后。虽然有许多的语言使用他们自己的构建工具,例如Clojure的Leiningen和Scala的SBT。大多数的语言(包括以前的)可以使用更多的标准构建工具。
Ant
这是XML,这是NAnt的基础。这很像MS-Build。
Maven
Maven更加地流行。当你看一个包含pom.xml工程文件的时候,这就是Maven。它同时也是XML。但是,Maven不仅仅是一个构建工具。这是一个包装系统。就像在NuGet的.NET,像NPM在Node.js.很像nuget.org,还有一个maven.org。并且类似于整个“如果不在nuget.org它不存在”,那么在Java生态系统中也是一样的情况。像NuGet一样,您还可以托管自己的Maven存储库。 Artifactory是一种允许您这样做的产品。
Gradle
Gradle是一个更好的Maven。它基于Groovy,所以你摆脱了可怕的XML,并提供了一个更好的管理依赖的方式。
IntelliJ IDEA 构建
虽然IDE和更多属于工具部分,IntelliJ IDEA还提供自己的构建系统。但是,您只能在了解它的环境中使用它,这基本上是IntelliJ IDEA和TeamCity。
*注:使用这个工具,我写过一篇文章,请看这里。
框架和库
有太多的框架和库列出,所以我将简短地说明这一节。
JSON Serialization (JSON序列化)
简介:在JSON文本和.NET对象之间转换的最快方法是使用JsonSerializer。 JsonSerializer将.NET对象转换成JSON等价物,并将.NET对象属性名称映射到JSON属性名称并将其复制。
参考文章(英文):http://www.newtonsoft.com/json/help/html/SerializingJSON.htm
也可以看看笔者我翻译的(部分):http://tli-tli.com/2017/07/08/json-serialization/
Unit Testing
相当多的单元测试框架:
JUnit- 作为标准。效果很好。几乎所有的工具都支持。
Spek- 免责声明。这是我自己的框架,但是由于我使用它,所以值得一提。提供更好的DSL。至少我觉得如此。
JBehave-Dan North’soriginal JBehave framework.
TestNG- 替代JUnit。
-----------------------------------分割线--------------------------------------------------
最后更新日期:2017/07/08