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...