珠聯壁合地設天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java開發環境(集成web框架Springboot)

原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_194

也許有人從未聽說過Python,但是不會有人沒聽說過Java,它作為一個擁有悠久歷史的老牌編程語言,常年雄踞TIOBE編程語言榜首,其頂尖的霸主地位不可撼動,而M1 mac業已發布了一段時間,作為跨時代的頂級芯片系統,這兩大巨頭能否珠聯璧合,讓開發者們猛虎添翼、更上層樓?本次我們嘗試在M1 mac系統中搭建Java開發環境,并且集成目前Web開發領域紅的發紫的Springboot框架,另外,誰說玩兒Java就必須得用Eclipse或者IntelliJ IDEA?我們就驕傲地使用Vscode。

首先需要應對的是OpenJDK的選擇,這里推薦使用Azul公司提供的zulu版本,Zulu又是什么? 它是Azul提供商業支持的OpenJDK商業發行版,與Oracle JDK有高度的一致性,而最重要的一點是,它支持arm64架構,這正是M1 mac 運行Java項目的先決條件,下載地址:https://www.azul.com/downloads/?version=java-11-lts&os=macos&architecture=arm-64-bit&package=jdk ,這里我們選擇了LTS(長期維護)版本的jdk11,注意一定要選擇Arm64版本的。

image

下載成功后,雙擊安裝即可,安裝成功后,zulu會把jdk放在下面這個路徑里:

/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

如果愿意,可以配置一下環境變量,這樣方便以后操作多版本jdk:

vim ~/.zshrc

添加:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

存盤退出,重啟終端,輸入

java -version

返回:

openjdk version "11.0.11" 2021-04-20 LTS  
OpenJDK Runtime Environment Zulu11.48+21-CA (build 11.0.11+9-LTS)  
OpenJDK 64-Bit Server VM Zulu11.48+21-CA (build 11.0.11+9-LTS, mixed mode)  
(base) ?  ~ 

表示arm64版本的JDK安裝成功。

接著來安裝Maven,它是專門為Java項目打造的管理和構建工具,它能幫我們快速編譯,測試,打包,發布Java項目,非常方便。

一般情況下,可以去Maven官網下載二進制文件,這里推薦一個更簡單的方案,就是使用Homebrew,注意這里一定要使用arm64架構的,安裝命令如下:

/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"

基于arm64的Homebrew統一安裝在系統的/opt/homebrew目錄,主要是為了和老版的x86區別開。

安裝成功后,輸入命令:

brew -v

將會返回版本號:

(base) ?  ~ brew -v        
Homebrew 3.0.2  
Homebrew/homebrew-core (git revision ae4118; last commit 2021-02-28)  
Homebrew/homebrew-cask (git revision 9510a9; last commit 2021-05-20)

代表安裝成功。

之后使用brew命令來安裝Maven:

brew install maven

就是這么簡單,安裝成功后,無需單獨配置環境變量,直接可以運行:

mvn -version

返回信息:

(base) ?  ~ mvn -version  
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)  
Maven home: /opt/homebrew/Cellar/maven/3.6.3_1/libexec  
Java version: 11.0.11, vendor: Azul Systems, Inc., runtime: /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home  
Default locale: zh_CN_#Hans, platform encoding: UTF-8  
OS name: "mac os x", version: "11.2.2", arch: "aarch64", family: "mac"  
(base) ?  ~

默認會安裝最新穩定版。

同時,運行 brew list maven,就可以查看maven的具體安裝目錄,這個一會兒會用到:

(base) ?  ~ brew list maven  
/opt/homebrew/Cellar/maven/3.6.3_1/bin/mvn  
/opt/homebrew/Cellar/maven/3.6.3_1/bin/mvnDebug  
/opt/homebrew/Cellar/maven/3.6.3_1/bin/mvnyjp  
/opt/homebrew/Cellar/maven/3.6.3_1/libexec/bin/ (4 files)  
/opt/homebrew/Cellar/maven/3.6.3_1/libexec/boot/ (2 files)  
/opt/homebrew/Cellar/maven/3.6.3_1/libexec/conf/ (3 files)  
/opt/homebrew/Cellar/maven/3.6.3_1/libexec/lib/ (70 files)

至此,運行Java項目的兩大前提:JDK和Maven,我們就都安裝完畢了。

下面讓我們配置M1 mac下開發Java的利器:Vscode,去官網下載即可:https://code.visualstudio.com/Download# ,但是需要注意的是,一定要選擇arm64架構的版本:

image

下載后,進行安裝操作,安裝完成后,我們需要裝兩個插件幫助我們運行Java項目。

首先打開左側應用商店菜單,搜索:Java Extension Pack 。進行安裝,這是Java的擴展包,

image

隨后,搜索:Spring Boot Extension Pack ,進行安裝,它是Springboot的擴展包。

image

安裝這倆個擴展包時,系統會陸續自動安裝另外一些依賴包,耐心等待即可。

安裝成功后,重啟vscode,隨后打開上面菜單中的code->首選項->設置,搜索maven,然后點選“在settings.json”中編輯:

image

在配置文件中,需要加入以下配置:

 "java.home": "/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home", //JAVA_HOME  
  
    // 指定 maven 的配置文件位置  
    "java.configuration.maven.userSettings": "/opt/homebrew/Cellar/maven/3.6.3_1/libexec/conf/settings.xml",  
      
    //maven 環境變量,指定為 mvn  
    "maven.executable.path": "mvn",   
  
    //自動更新影響的pom  
    "maven.pomfile.autoUpdateEffectivePOM": true,   
    //跳過測試, 不需要跳過可刪除  
    "maven.executable.options": "-DskipTests",   
  
    //當此值設為 true 時,且配置了“java.home”時,  
    //新建終端會自動添加環境 JDK 環境變量 為 “java.home"的值  
    "maven.terminal.useJavaHome": true,  
  
    //指定 maven 所用 jdk   
    "maven.terminal.customEnv": [  
        {  
            "environmentVariable": "JAVA_HOME", //環境變量名  
             "value": "/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home",    //JDK 安裝 路徑  
            
        }  
    ],  
      
    //在構建時,自動修改 java 項目的配置信息 ,classpath信息  
    "java.configuration.updateBuildConfiguration": "automatic",

這里主要的變量就是JDK的路徑和Maven配置文件的路徑,分別對應到剛剛安裝好的兩個路徑,分別是:/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home和/opt/homebrew/Cellar/maven/3.6.3_1/libexec/conf/settings.xml

做好配置后,安裝好的擴展就可以用了,再次重啟vscode。

讓我們來體驗一下Springboot的魅力,輸入快捷鍵:

command + shift + p

打開命令模式,鍵入:spring,選擇創建 Maven 項目:

image

選擇Springboot版本:2.4.5;語言:Java;GroupId直接默認回車;項目名稱:mydemo;打包方式選擇:Jar;JDK版本:11;默認依賴:DevTools(代碼修改熱更新,無需重啟)、Web(集成tomcat、SpringMVC)、Lombok(智能生成setter、getter、toString等接口,無需手動生成,代碼更簡介)、Thymeleaf (模板引擎)。

選擇好要引入的包后直接回車,在新彈出的窗口中選擇項目路徑,到此Spring Boot項目創建完成:

image

隨后將創建好的mydemo項目導入到vscode的工作空間:

image

之后,點選左側小蟲子圖標,為項目添加啟動文件,選擇Java:

image

此時,需要等待一下,vscode會導入相關依賴。

創建成功后,會發現項目的根目錄新增了一個.vscode文件件里面有一個啟動文件launch.json:

{  
    // 使用 IntelliSense 了解相關屬性。   
    // 懸停以查看現有屬性的描述。  
    // 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387  
    "version": "0.2.0",  
    "configurations": [  
        {  
            "type": "java",  
            "name": "Launch Current File",  
            "request": "launch",  
            "mainClass": "${file}"  
        },  
        {  
            "type": "java",  
            "name": "Launch MydemoApplication",  
            "request": "launch",  
            "mainClass": "com.example.mydemo.MydemoApplication",  
            "projectName": "mydemo"  
        }  
    ]  
}

有了它,我們就可以用內置服務器啟動項目了,現在打開項目文件夾中的入口文件/mydemo/src/main/java/com/example/mydemo/MydemoApplication.java,改成下面的樣子:

package com.example.mydemo;  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RestController;  
  
@RestController  
@SpringBootApplication  
public class MydemoApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(MydemoApplication.class, args);  
    }  
  
  @RequestMapping("/")  
  public String home() {  
    return "Hey,歡迎來到M1 mac的世界";  
  }  
  
}

這里我們用簡單的路由映射到一個簡單的視圖,首頁返回一串文字。

接著打開小蟲子圖標,點開控制臺,然后點擊三角箭頭啟動項目:

image

服務應聲啟動:

(base) ?  mydemo git:(master) ?  /usr/bin/env "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:62011 -Dfile.encoding=UTF-8 -cp /var/folders/5x/gpftd0654bv7zvzyv39449rc0000gp/T/cp_bp8k59s9mveb6o8xc0fjjde5w.jar com.example.mydemo.MydemoApplication   
  
  .   ____          _            __ _ _  
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \  
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \  
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  
  '  |____| .__|_| |_|_| |_\__, | / / / /  
 =========|_|==============|___/=/_/_/_/  
 :: Spring Boot ::       (v2.3.10.RELEASE)  
  
2021-05-20 23:05:27.439  INFO 39304 --- [  restartedMain] com.example.mydemo.MydemoApplication     : Starting MydemoApplication on liuyue with PID 39304 (/Users/liuyue/wodfan/work/mydemo/bin/main started by liuyue in /Users/liuyue/wodfan/work/mydemo)  
2021-05-20 23:05:27.443  INFO 39304 --- [  restartedMain] com.example.mydemo.MydemoApplication     : No active profile set, falling back to default profiles: default  
2021-05-20 23:05:27.675  INFO 39304 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable  
2021-05-20 23:05:27.676  INFO 39304 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'  
2021-05-20 23:05:29.223  INFO 39304 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)  
2021-05-20 23:05:29.237  INFO 39304 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]  
2021-05-20 23:05:29.237  INFO 39304 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.45]  
2021-05-20 23:05:29.301  INFO 39304 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext  
2021-05-20 23:05:29.301  INFO 39304 --- [  restartedMain] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1624 ms  
2021-05-20 23:05:29.689  INFO 39304 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'  
2021-05-20 23:05:29.975  WARN 39304 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server  
2021-05-20 23:05:30.036  INFO 39304 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''  
2021-05-20 23:05:30.063  INFO 39304 --- [  restartedMain] com.example.mydemo.MydemoApplication     : Started MydemoApplication in 3.13 seconds (JVM running for 3.838)

此時打開瀏覽器,訪問:http://localhost:8080

image

結語:在過往印象中,Java是一款嚴肅的語言,它古板、教條、一絲不茍,處處循規蹈矩,但其實,隨著時代的發展,你會發現它其實是與時俱進的,在時代的浪潮中迸發出了Spring boot這樣“習慣優于配置”的框架,徹底顛覆了傳統Java 項目笨重、繁多的配置、低下的開發效率、復雜的部署流程以及第三方技術集成難度大的特點,并且在M1 mac系統下,我們可以很輕松的用Vscode來寫Java代碼,就像寫Python一樣。最后,奉上項目代碼與君共觴:https://gitee.com/QiHanXiBei/mydemo.git

原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_194

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容