原文轉載自「劉悅的技術博客」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版本的。
下載成功后,雙擊安裝即可,安裝成功后,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架構的版本:
下載后,進行安裝操作,安裝完成后,我們需要裝兩個插件幫助我們運行Java項目。
首先打開左側應用商店菜單,搜索:Java Extension Pack 。進行安裝,這是Java的擴展包,
隨后,搜索:Spring Boot Extension Pack ,進行安裝,它是Springboot的擴展包。
安裝這倆個擴展包時,系統會陸續自動安裝另外一些依賴包,耐心等待即可。
安裝成功后,重啟vscode,隨后打開上面菜單中的code->首選項->設置,搜索maven,然后點選“在settings.json”中編輯:
在配置文件中,需要加入以下配置:
"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 項目:
選擇Springboot版本:2.4.5;語言:Java;GroupId直接默認回車;項目名稱:mydemo;打包方式選擇:Jar;JDK版本:11;默認依賴:DevTools(代碼修改熱更新,無需重啟)、Web(集成tomcat、SpringMVC)、Lombok(智能生成setter、getter、toString等接口,無需手動生成,代碼更簡介)、Thymeleaf (模板引擎)。
選擇好要引入的包后直接回車,在新彈出的窗口中選擇項目路徑,到此Spring Boot項目創建完成:
隨后將創建好的mydemo項目導入到vscode的工作空間:
之后,點選左側小蟲子圖標,為項目添加啟動文件,選擇Java:
此時,需要等待一下,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的世界";
}
}
這里我們用簡單的路由映射到一個簡單的視圖,首頁返回一串文字。
接著打開小蟲子圖標,點開控制臺,然后點擊三角箭頭啟動項目:
服務應聲啟動:
(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
結語:在過往印象中,Java是一款嚴肅的語言,它古板、教條、一絲不茍,處處循規蹈矩,但其實,隨著時代的發展,你會發現它其實是與時俱進的,在時代的浪潮中迸發出了Spring boot這樣“習慣優于配置”的框架,徹底顛覆了傳統Java 項目笨重、繁多的配置、低下的開發效率、復雜的部署流程以及第三方技術集成難度大的特點,并且在M1 mac系統下,我們可以很輕松的用Vscode來寫Java代碼,就像寫Python一樣。最后,奉上項目代碼與君共觴:https://gitee.com/QiHanXiBei/mydemo.git
原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_194