日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

没了IDE,你的Java项目还能Run起来吗~

發(fā)布時間:2025/3/16 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 没了IDE,你的Java项目还能Run起来吗~ 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

計算機只能識別機器碼0101...編程語言->能執(zhí)行的機器碼 需要經(jīng)過 預處理->編譯->匯編->鏈接->機器碼過程。一個語言處理系統(tǒng)的示意圖如下:

編譯器 是將源語言程序一次性翻譯成一個等價的,用目標語言編寫的程序。還存在另一種常見的語言處理器,解釋器:它是逐個語句的執(zhí)行源語言程序。由一個編譯器產(chǎn)生的目標語言程序通常比一個解釋器快,但解釋器的錯誤診斷效果通常更好。

Java語言處理器結(jié)合了編譯和解釋的過程。一個.Java源程序首先被編譯為.class字節(jié)碼文件,被加載到虛擬機中,然后由虛擬機將字節(jié)碼翻譯成機器碼。

虛擬機的好處在于:一旦一個程序被轉(zhuǎn)換成 Java 字節(jié)碼,那么它便可以在不同平臺上的虛擬機實現(xiàn)里運行。實現(xiàn)一次編寫,到處運行。另外一個好處是它帶來了一個托管環(huán)境。這個托管環(huán)境能夠代替我們處理一些代碼中冗長而且容易出錯的部分,如自動內(nèi)存管理與垃圾回收。

在Hotspot中,虛擬機翻譯字節(jié)碼有兩種方式:

1.解釋執(zhí)行:即逐條將字節(jié)碼翻譯成機器碼并執(zhí)行。

2.即時編譯:即將一個方法中包含的所有字節(jié)碼編譯成機器碼后再執(zhí)行。

前者的優(yōu)勢在于無需等待編譯,而后者的優(yōu)勢在于實際運行速度更快。HotSpot 默認采用混合模式,綜合了解釋執(zhí)行和即時編譯兩者的優(yōu)點。它會先解釋執(zhí)行字節(jié)碼,而后將其中反復執(zhí)行的熱點代碼,以方法為單位進行即時編譯。

即時編譯建立在程序符合二八定律的假設上,也就是百分之二十的代碼占據(jù)了百分之八十的計算資源。

好了,裝X結(jié)束。

阿姨知道的編譯知識全在上面了。。(っ╥╯﹏╰╥c)

如題,下面我們來看一下讓Java項目運行起來我們能做什么。

我們能做的很簡單,當然不是寫虛擬機。我們只需要:

  • 執(zhí)行command javac,將.Java文件變?yōu)?class文件。

  • 執(zhí)行command java,讓.class文件運行起來。

  • 也就是 執(zhí)行command :)

    Java程序的運行方式

    Java程序可以通過java命令運行.class文件運行可執(zhí)行Jar文件。我們先看第一種方式:從Hello World開始。

    運行.class文件

    Step1:編寫Java文件

    Step2:執(zhí)行 command javac

    將.java文件變?yōu)?class文件

    小貼士:class文件的全路徑名是包名目錄+ 類文件名。

    Step3:執(zhí)行 command java

    運行.class文件

    神奇,我們沒有用IDE讓Java程序運行起來了 :)

    小伙伴先別噴老阿姨,哪特么有這么簡單的Java項目啊。。我們工作中用的明明都是Jar文件啊... Jar文件咋運行啊!!

    運行可執(zhí)行Jar文件

    Jar文件是基于ZIP文件格式的一種文件格式,它將大量的Java類文件、相關(guān)的元數(shù)據(jù)和資源(文本、圖片等)文件聚合到一個Jar文件中,此外還包含一個可選的META-INF文件夾。這個文件夾下的文件或文件夾主要用來打包和擴展配置信息,包括安全,版本,擴展程序和服務等。如MANIFEST.MF文件定義了擴展和打包的相關(guān)數(shù)據(jù)信息。一個Jar文件通常在項目中用作第三方類庫使用,也是項目構(gòu)建的一部分。

    生成一個Jar文件大致分為兩步:

    1.將源文件編譯為.class文件

    2.通過 command jar命令,將.class文件,資源文件等等打成一個文件格式的Jar文件。

    我們以一個SbDemo項目為例來看Jar文件的打包和運行。項目目錄結(jié)構(gòu)如下:

    Test2.java中調(diào)用了Test1.java的方法

    我們需要先將Test1.java編譯并打成一個Test1.jar文件,然后通過Test1.jar將Test2.java編譯并打成一個可執(zhí)行的Test2.jar文件

    可執(zhí)行和不可執(zhí)行的Jar文件 區(qū)別在于是否在Jar文件中指定了main方法的入口,我們后面再看。

    Step1:Test1.java的編譯

    Step2:將編譯后的classes/com/Test1.class文件打成一個Test1.jar包

    Java中和jar包相關(guān)的命令是jar命令,生成一個jar包我們需要定義信息文件(manifest-file),它可以定義所生成jar包的classpath類搜索路徑,jar包的入口類等等。可以理解為與Jar包相關(guān)的元數(shù)據(jù)配置信息

    Step2.1 書寫信息文件

    這里我們使用resources/manifest-test1.text文件作為信息文件

    是的,Test1.java太簡單了,就是打成一個可被他人引用的jar包,信息文件不重要。

    Step2.2 執(zhí)行打包命令

    Step3. 編譯Test2.java文件

    因為Test2.java中引用了com.Test1類,所以我們需要在編譯時指定Classpath路徑。Classpath:顧名思義,是指待編譯類依賴的類所在路徑位置。我們可以通過 javac 的 -cp 參數(shù)指定。

    關(guān)于編譯時classpath的值優(yōu)先級如下:

    • 如果沒有傳入classpath參數(shù),將使用環(huán)境變量CLASSPATH的值。(小伙伴不知道環(huán)境變量咋查看和設置?去看阿姨的上一篇文章:)

    • 如果沒有發(fā)現(xiàn)環(huán)境變量CLASSPATH,將使用 執(zhí)行命令的當前文件夾(.)。

    • 如果javac命令行 通過-classpath or -cp參數(shù)指定了類路徑值,則優(yōu)先級最高。

    這里我們使用-cp指定Test1.jar所在位置

    可以看到classes目錄下已經(jīng)生成了com2/Test2.class文件了。

    Step4. 將編譯后的Test2.class和它依賴的Test1.jar一起打成一個可執(zhí)行的Jar包

    Step4.1 書寫信息文件

    這時候我們使用信息文件resources/manifest-test2.text文件指定這些信息

    Step4.2 執(zhí)行Jar包生成命令

    可以看到在lib目錄下生成了Test2.jar

    Step5.運行我們的可執(zhí)行Jar

    大功告成了,我們的SbDemo項目Run起來了...

    當然實際項目不可能人肉編譯,打包。我們需要通過Maven/Gradle等構(gòu)建工具,幫助我們管理代碼之間的Jar包依賴,構(gòu)建,部署...我們可能大多時候通過點一下IDE就托管了Maven的構(gòu)建部署命令。

    拿Maven舉例子,Maven首先定義了一套項目結(jié)構(gòu),我們按照它的結(jié)構(gòu)書寫代碼,引入各個模塊所需要的Jar包依賴。然后Maven可以通過自己的生命周期管理項目的清理,構(gòu)建,打包,部署階段。每個階段有對應的Maven插件執(zhí)行相應的目標。IDE又整合了Maven,使我們通過點吧點吧按鈕就完成了項目的運行。

    但是當一個項目并沒有按照規(guī)范的構(gòu)建工具結(jié)構(gòu)搭建,或者項目沒有成功運行報錯時,了解Java實際的編譯運行過程會對理解、解決這類問題有所幫助。

    文中提到的命令均可通過command -help進一步了解可用參數(shù),如javac -help~

    參考資料:?

    [1].《編譯原理》序 ? (゚′ω`゚)゚ [2].https://time.geekbang.org/column/article/11289

    有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

    歡迎大家關(guān)注Java之道公眾號

    好文章,我在看??

    總結(jié)

    以上是生活随笔為你收集整理的没了IDE,你的Java项目还能Run起来吗~的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。