2023年1月27日

安裝 JDK

安裝 Java JDK

對於初學 Java 的人,建立 JDK 開發環境,常會造成困擾。
OpenJDK 僅是 Open Source 原始碼,其二進位則是由許多供應商 (Distributions) 所發布。要在 Windows 上安裝時,大致上,需要注意三個重點:JDK 版本、供應商,以及設定環境變數。

JDK 版本

JDK 各版本的詳細資料,可以在 Wikipedia 查看。但通常我們只會專注在 LTS (Long-term support) 的版本,以下列出主要的三個 LTS 版號資訊:

版號 發布時間 簡要說明
8 2014-03 Lambdas
支援 Spring 5.3.x 及 Spring Boot 2.x
11 2018-09 New HTTP Client
支援 Spring 5.3.x 及 Spring Boot 2.x
17 2021-09 Sealed Classes
支援 Spring Framework 6 及 Spring Boot 3

供應商 (Distributions)

列表如下:

安裝 BellSoft Liberica JDK version 17

在 Spring Quickstart Guide 官方網站裡 ,建議使用 BellSoft Liberica JDK version 17。進入 BellSoft 下載 SDK 時,會發現提供各版本之 JDK,下列範例,將使用 JDK 17 LTS 來示範。下載的檔案格式為 .msi,因此可以很容易依照步驟完成安裝。

設定環境變數

如果您的 Windows 環境,還沒有安裝其他版本之 JDK,BellSoft 安裝程式會自動在 Windows 環境變數/系統變數 中,加入 JAVA_HOME 變數以及增添 Path 路徑,預設資料如下:

變數 值
JAVA_HOME C:\Program Files\BellSoft\LibericaJDK-17\
Path C:\Program Files\BellSoft\LibericaJDK-17\bin\

完成安裝後,開啟 PowerShell 輸入下列指令,查看輸出結果,來確定安裝是否成功:

> java --version
openjdk 17.0.6 2023-01-17 LTS
OpenJDK Runtime Environment (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM (build 17.0.6+10-LTS, mixed mode, sharing)
> javac --version
javac 17.0.6

建立 Hello World 程式

利用 spring initializr 可以快速建立 project。您可以透過 spring initializr 網站所提供的介面設定選項,並下載專案;或直接在 vscode 的命令列 (Ctrl+Shift+P),搜尋 “spring initializr” 依步驟執行,都可以建立起專案。

在專案中的 src\main\java\com\example\demo 目錄下,開啟 DemoApplication.java,並參考下列範例修改內容:

package  com.example.demo;

import  org.springframework.boot.SpringApplication;
import  org.springframework.boot.autoconfigure.SpringBootApplication;
import  org.springframework.web.bind.annotation.GetMapping;
import  org.springframework.web.bind.annotation.RequestParam;
import  org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public  class  DemoApplication {
	public  static  void  main(String[] args) {
	SpringApplication.run(DemoApplication.class, args);
	}
	
	@GetMapping("/hello")
	public  String  hello(@RequestParam(value = "name", defaultValue = "World") String  name) {
		return  String.format("Hello %s!", name);
	}
}

開啟 terminal (Ctrl+`),輸入:

./mvnw spring-boot:run

執行後,以瀏覽器開啟 http://localhost:8080/hello,即可看到 Hello World! 網頁。


參考資料:


2023年1月26日

GCP Artifact Registry

GCP Artifact Registry

簡介 GCP Artifact Registry,並提供範例,逐步介紹將 Docker Image Push 至 GCP Artifact Registry。

Artifact Registry 改進原有的 Container Registry,可以同時存放 container images 與 non-container artifacts,如 Maven、npm、Python、Apt、Yum、Kubeflow Pipelines 等套件。

文章範例執行於 Windows 11 環境,使用 PowerShell 7.3.1。

GCP Push and pull images

前置作業

  1. 建立 GCP Project (本範例為 artifact-registry-dyson)
  2. 本機需要安裝 Docker

Google Cloud CLI Installer

若您尚未安裝 gcloud CLI,可參考下列網頁進行安裝: Install the gcloud CLI。

安裝後,會詢問是否要登入與選擇預設的專案名稱。完成後, 便可以在 PowerShell 輸入 gcloud 指令了。

Create Repository

選擇您想要加入的 GCP Project,新增 Artifact Registry,相關設定選項如下:
- Name: quickstart-docker-repo (Repository 名稱,您可自行設定)
- Format: Docker
- Location Type: Region
- Region: us-central1
Region 也可以選擇 asia-east1 (Taiwan),機房位於彰濱工業區。

設定授權

執行下列指令,將修改 docker configuration 內容:

gcloud auth configure-docker \
  us-central1-docker.pkg.dev

若 Region 選擇 asia-east1,那麼上列指令,則改為:

gcloud auth configure-docker \
  asia-east1-docker.pkg.dev

檢查 docker configuration,會發現新增了 credHelpers 區塊。執行下列指令:

cat $env:UserProfile\.docker\config.json

顯示結果如下:

{
"credsStore": "desktop",
"credHelpers": {
  "us-central1-docker.pkg.dev": "gcloud"
  }
}

Pull Docker Image

接下來,您可以自行開發或由 Docker Hub 取得 Docker Image:

docker pull nginx

Tag Docker Image

在 push docker image 之前,先將剛才新增的 container registry,以 respository name 透過 tag 加入 docker image 中。

Tag 的規則是 <hostname>/<project-name>/<repository-name>/<image-name>:<tag>

docker tag nginx \
  us-central1-docker.pkg.dev \
  /artifact-registry-dyson \
  /quickstart-docker-repo \
  /nginx-image:tag1
  • artifact-registry-dyson: GCP Project ID,這是您可以自行建立的專案名稱
  • us-central1: 為 repository host 所在位置,
  • docker.pkg.dev: Docker repositories 的 hostname
  • nginx-image: Docker image name

Push Docker Image

最後,並可以將 Docker push 至私有的 registry

docker push us-central1-docker.pkg.dev \
/artifact-registry-dyson \
/quickstart-docker-repo \
/nginx-image:tag1```

***
參考資料:
- [Artifact Registry: the next generation of Container Registry](https://cloud.google.com/blog/products/application-development/understanding-artifact-registry-vs-container-registry)
***

藉由 Stackedit 使用 Markdown 發布 Blogger 文章

超過 10 年沒寫 Blogger,中間大多採用 GitBook 並放在 GitLab 的 Page 中。最近發現可以用 Markdown 來撰寫內容,變得方便許多,因此回過來使用。

使用 Stackedit 編輯平台,透過 Markdwon 編輯文章後,發佈到 Google Blogger。

記得發布時,Template 選擇 Styled HTML,否則 Code Block 的內容會超出畫面。

如果內容更新時,不想影響原先在 Blogger 的發布日期,造成順序不如預期,記得在 File properties 裡,設定日期。另外,File properties 的欄位還包含 blogger 所需要的 tag。


參考文章:【Blogger】用 Markdown 寫 Blogger 文章


Deploying Vue & .NET with Google OAuth on GCP Cloud Run

Deploying Vue & .NET with Google OAuth on GCP Cloud Run Deploying Vue & .NET with Google OAuth on GCP Cloud Run...