本文章為翻譯稿化焕,原文請看:http://hadihariri.com/2013/12/29/jvm-minimal-survival-guide-for-the-dotnet-developer/
本文同時(shí)是對我這篇文章的補(bǔ)充:http://www.reibang.com/p/0cd7678fd9bb
目標(biāo)讀者
本指南主要針對.NET開發(fā)人員恼五,因?yàn)榕c.NET進(jìn)行了很多比較。實(shí)際上URL仍然表明它或辖。話雖如此字柠,我希望它對于也是Java平臺新手的非.NET開發(fā)人員來說也是有用的。
基礎(chǔ)
Java語言 ? Java生態(tài)系統(tǒng) ? Java的JVM
他們是不同的雁比。一個是編程語言(類似C#)淳蔼,另一個是生態(tài)系統(tǒng)(ecosystem)(類似.NET)不幸的是侧蘸,似乎Java通常用于指所有三個。我不喜歡Java作為一種語言鹉梨,但Java生態(tài)系統(tǒng)非彻胛海活躍,并且正在發(fā)生大量的創(chuàng)新俯画。實(shí)際上析桥,作為.NET開發(fā)人員,您可能熟悉NHibernate,NUnit泡仗,NLog埋虹,NAnt等庫,這些庫源自Java生態(tài)系統(tǒng)(drop the N)娩怎。
多語言平臺
我們可以將JVM視為CLR搔课。兩者都是為多種語言提供平臺的虛擬機(jī)。他們有差異截亦,但是支持多種語言爬泥。而在CLR,我們大多使用C#崩瓤,VB.NET和F#袍啡,在JVM上有Java, Scala, Clojure, Ceylon, Groovy, JRuby和Kotlin等等。(在我這篇文章中却桶,就使用了Kotlin)
JVM 字節(jié)碼
JVM字節(jié)碼是基于JVM的語言編譯為在JVM上運(yùn)行境输。它類似于.NET中的IL。
跨平臺
JVM是100%的跨平臺颖系。除了Windows嗅剖,OSX和Linux之外,它還運(yùn)行在許多其他類型的設(shè)備上嘁扼。
JVM實(shí)現(xiàn)信粮,版本和版本
JVM有多個實(shí)現(xiàn)版本。最常見的是Oracle和OpenJDK趁啸。甚至有一個稱為IKVM.NET的.NET實(shí)現(xiàn)版本强缘。
編輯器和版本
這可能是本指南中最復(fù)雜的部分。令人驚奇的是莲绰,您可以如命名/版本控制一樣簡單。這甚至使微軟的產(chǎn)品命名看起來不錯姑丑。
Editions
JRE - Java Runtime Environment. 這是用于運(yùn)行JVM應(yīng)用程序蛤签。您只能通過這種方式開發(fā)在JVM上運(yùn)行的應(yīng)用程序。
Java SE (JDK) - Java Standard Edition. 也稱為JDK栅哀。這是您在JVM上開發(fā)應(yīng)用程序所需的最低要求震肮。
Java EE - Java Enterprise Edition. 名字已經(jīng)非常清楚地說明了。這就是您所有的Enterprisey的東西留拾,如分布式戳晌,大規(guī)模的應(yīng)用程序。是的痴柔,不能更模糊沦偎。它包括Java SE。
Java ME - Java Micro Edition. 這是一個較小的子集,專注于手機(jī)和較小的設(shè)備豪嚎。這就像.NET Micro Framework搔驼。
JavaFX- Swing的替代,它是/是Java中的主要GUI工具包侈询。另外(雖然有爭議的話題)也是針對RIA的舌涨。好像HTML / JS / CSS不夠好嗎?
你可以推斷扔字,所有的Java XY都是JDK的囊嘉。
點(diǎn)擊此處查看更多。
Versions
目前發(fā)布的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呢。其實(shí)篷角,這里Java8意味著減去前面的1焊刹,所以同樣的1.5表示Java 5. 1.6是Java 6. 1.7是Java 7。
安裝Java
可以參考一下:http://www.reibang.com/p/4a90505e448c
應(yīng)用程序輸出a.k.a工件(Application Output a.k.a Artifacts)
在.NET以及本地應(yīng)用程序中恳蹲,編譯時(shí)通常會得到可執(zhí)行文件和/或一系列DLL虐块。使用Java,您可以在輸出文件夾中獲取一堆.class文件嘉蕾。每個類文件通常對應(yīng)于Java類(當(dāng)編譯Java語言或編譯為字節(jié)碼時(shí)遵循約定的其他語言)贺奠。這些類是JVM字節(jié)碼,它類似于CLR上的IL错忱。
JAR文件
與其創(chuàng)建很多個類文件儡率,不如創(chuàng)建一個JAR,它只不過是.class文件的壓縮版本以清。您可以使用自己喜愛的工具創(chuàng)建JAR文件儿普,或者直接運(yùn)行:
jar cf jar-file input-file(s)
jar附帶JDK(/ bin文件夾)。
WAR文件
WAR文件是由Sun創(chuàng)建的Web應(yīng)用程序的JAR文件掷倔。它包含一堆類文件和一些額外的元數(shù)據(jù)和文件夾眉孩,其中包含諸如TomCat之類的Web服務(wù)器的信息。
運(yùn)行Java應(yīng)用程序
任何具有主類的Java應(yīng)用程序都可以從命令提示符運(yùn)行勒葱。類型:
java <class_containing_main_method>
你必須從.class文件的文件夾運(yùn)行它浪汪。
類路徑
運(yùn)行應(yīng)用程序時(shí),JVM將查找當(dāng)前文件夾中所有必需的依賴項(xiàng)凛虽,然后查找CLASSPATH環(huán)境變量死遭,該變量指向包含.class文件或JAR / ZIP的一個或多個文件夾。您可以全局設(shè)置CLASSPATH環(huán)境變量凯旋,然后由Java使用它呀潭,或者在運(yùn)行應(yīng)用程序時(shí)將其作為命令行參數(shù)傳遞:
java <class_containing_main_method> -cp <class_path>
每個條目都用冒號分隔钉迷。
構(gòu)建工具
在.NET中,有許多的構(gòu)建工具例如MS Build, NAnt, Albacore, Fake 等等蜗侈。而JVM也沒有落后篷牌。雖然有許多的語言使用他們自己的構(gòu)建工具,例如Clojure的Leiningen和Scala的SBT踏幻。大多數(shù)的語言(包括以前的)可以使用更多的標(biāo)準(zhǔn)構(gòu)建工具枷颊。
Ant
這是XML,這是NAnt的基礎(chǔ)该面。這很像MS-Build夭苗。
Maven
Maven更加地流行。當(dāng)你看一個包含pom.xml工程文件的時(shí)候隔缀,這就是Maven题造。它同時(shí)也是XML。但是猾瘸,Maven不僅僅是一個構(gòu)建工具界赔。這是一個包裝系統(tǒng)。就像在NuGet的.NET牵触,像NPM在Node.js.很像nuget.org淮悼,還有一個maven.org。并且類似于整個“如果不在nuget.org它不存在”揽思,那么在Java生態(tài)系統(tǒng)中也是一樣的情況袜腥。像NuGet一樣,您還可以托管自己的Maven存儲庫钉汗。 Artifactory是一種允許您這樣做的產(chǎn)品羹令。
Gradle
Gradle是一個更好的Maven。它基于Groovy损痰,所以你擺脫了可怕的XML福侈,并提供了一個更好的管理依賴的方式。
IntelliJ IDEA 構(gòu)建
雖然IDE和更多屬于工具部分卢未,IntelliJ IDEA還提供自己的構(gòu)建系統(tǒng)肪凛。但是,您只能在了解它的環(huán)境中使用它尝丐,這基本上是IntelliJ IDEA和TeamCity显拜。
*注:使用這個工具衡奥,我寫過一篇文章爹袁,請看這里。
框架和庫
有太多的框架和庫列出矮固,所以我將簡短地說明這一節(jié)失息。
JSON Serialization (JSON序列化)
簡介:在JSON文本和.NET對象之間轉(zhuǎn)換的最快方法是使用JsonSerializer譬淳。 JsonSerializer將.NET對象轉(zhuǎn)換成JSON等價(jià)物,并將.NET對象屬性名稱映射到JSON屬性名稱并將其復(fù)制盹兢。
參考文章(英文):http://www.newtonsoft.com/json/help/html/SerializingJSON.htm
也可以看看筆者我翻譯的(部分):http://tli-tli.com/2017/07/08/json-serialization/
Unit Testing
相當(dāng)多的單元測試框架:
JUnit- 作為標(biāo)準(zhǔn)邻梆。效果很好。幾乎所有的工具都支持绎秒。
Spek- 免責(zé)聲明浦妄。這是我自己的框架,但是由于我使用它见芹,所以值得一提剂娄。提供更好的DSL。至少我覺得如此玄呛。
JBehave-Dan North’soriginal JBehave framework.
TestNG- 替代JUnit阅懦。
-----------------------------------分割線--------------------------------------------------
最后更新日期:2017/07/08