JVM生存指南精简版

作者: 冰霜青羽 | 来源:发表于2017-07-07 07:51 被阅读95次

    本文章为翻译稿,原文请看: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

    相关文章

      网友评论

        本文标题:JVM生存指南精简版

        本文链接:https://www.haomeiwen.com/subject/lixlhxtx.html