# 安裝Eclipse及Java 8流程
###### tags: `Work`

[TOC]
# 下載 Java 8
## 下載 Java 8 步驟
請下載 [Java 8](https://www.oracle.com/tw/java/technologies/javase/javase-jdk8-downloads.html) 。
> 請選 Windows/Mac 86 或 64 請看自己的電腦決定
> 我目前使用 jdk-8u291-windows-x64.exe [color=lightblue]
**Note:** 可能需要Oracle帳號,請自行申請一下。
**Note:** 環境變數會用到,所以請記得你的JDK Folder放在哪裡。
## 確認下載安裝是否成功
在Terminal (cmd) 底下,下以下command:
```=
java -version
```
如果成功會看到以下MSG:
>java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)[color=pink]

# 下載 Lombok
## Lombok 下載網址
請下載[Lombok 檔案](https://projectlombok.org/download) ,下載結束後請改檔案名為 "**lombok.jar**".
## Lombok 設定步驟
如果已經下載Eclipse的話:
1. 請把lombok檔案放報eclipse的檔案夾裡。
2. 用文字編輯器,打開eclipse.ini file,並加入以下行列在文檔的下方最。
```java=
//路徑每個人會有扁不太一樣,所以請自調
-javaagent:../Eclipse/lombok.jar
-vmargs -javaagent:lombok.jar
```
**eclipse.ini:**

**lombok在Eclipse的位子:**

**Note:**
如果跑專案 **log**有問題,可能代表lombok沒設定。
如果有設定,請到Project Tab > Clean
# 下載 Apache Maven
前往 [Apache Maven 官方網頁](https://maven.apache.org/)

下載**apache-maven-3.6.3-bin ZIP** file.

**Note:** 環境變數會用到,所以請記得你的Maven Folder放在哪裡。
## 確認下載安裝是否成功
請 **設定環境變數** 過後再試試看。
>使用者變數
>**Path**
>C:\Program Files\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin [color=orange]
>PS: 不知道哪裡設定環境變數的話,可以看這教學的 **設定環境變數** 的 Section 底下有圖片跟文字敘述。
**如何有成功呢?**
在Terminal (cmd) 底下,下以下command:
```=
mvn -version
```
如果成功會看到以下MSG:
>Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: C:\Program Files\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin\..
Java version: 1.8.0_281, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_281\jre
Default locale: zh_TW, platform encoding: MS950
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"[color=pink]
## 備註:
>如果**環境變數都設定好**了,可是**執行 mvn -version** 指令**沒有用**的話,**請重新開機**。 [color=red]
# 設定環境變數
## 打開控制台到環境變數位子
### 控制台在哪裡呢?
1. 找不到可以再收尋位子找control,就會出現控制台項目。
1. 前往**系統及安全性**。
2. 前往**系統**。
3. 前往**進階系統設定**。
4. 在**進階底下**可以看到**環境變數**紐。
>**STEP 1**

**STEP 2**

**STEP 3**

**STEP 4**

**STEP 5**
[color=#a6e2eb]
## 加上新的環境變數

### 使用者變數
**Path**
C:\Program Files\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin
### 系統變數
**JAVA_HOME**
C:\Program Files\Java\jdk1.8.0_281
**CLASSPATH**
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
**Path**
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
# 下載 Eclipse
## 下載Eclipse Zip File
前往 [Eclipse 官方下載網頁](https://www.eclipse.org/downloads/)

在這裡頭前往 [Download Packages](https://www.eclipse.org/downloads/packages/)

點擊 **Eclipse IDE for Java Developers**,會倒到別的網頁,在那**點擊下載(Download)**。

下載檔案為 **eclipse zip file**.
## 設定Installed JREs
### 打開Installed JREs項目
在Eclipse 開啟後:
1. 請到 **Window > Preferences**
2. 找一下 **Java > Installed JREs** 那邊需要**指向本地的JRE**,就像以下圖一樣。 (下面有加JRE的步驟)
**Note:** 如果原本就有的話,請刪除,再重新指向新的。
**Java/ Installed JRE:**

### ADD new JRE
1. 確認是否是本地的JRE
2. Installed JREs 裡面**刪除原本的(如果非本地)**,**請按ADD紐**。
3. 會打開一個**JRE Type的Window**,裡頭選**Standard VM**。
4. 請選擇你 **jdk Folder 裡面的 jre folder** 為Directory。
5. 填選你要的名稱,並**按Finish**。
6. 最後按Apply 過後再Apply and Close
**Step 3~5 圖案對照:**
>**Step 3:**

**Step 4:**

**Step 5:**
 [color=#2e84d5]
**Step Overview:**
> [color=#2e84d5]
### Aliyucs
請從**Gitlab > maven > core 3.0.6.jar**
```maven=
mvn install:install-file -Dfile=/换成本地路径/core-3.0.6.jar -DgroupId=com.aliyuncs.aliyun -DartifactId=core -Dversion=3.0.6 -Dpackaging=jar
```
## 設定 m2e
### 取得 Eclipse 需要的 m2e Url
首先開啟 [m2e Eclipse Url](https://www.eclipse.org/m2e/)。

進入以上圖的Url過後,請往下滑會看到m2e repository的url。請留下這網頁,並前往Eclipse 軟體。

**Note:** https://download.eclipse.org/technology/m2e/releases/latest/
(2021/04/15 如果沒有換還是這Link)
### 設定m2e Url在Eclipse
Eclipse開啟的情況下:
1. 請前往Help Tab 的 **Install New Software**。
2. 在Install Window,直接按Add。
3. 會請你填寫 name (匿名) 及 Location (這就是m2e的repository url),並Add進去。
4. 勾選選單並且按Next。
**Step 1~5 圖案對照:**
>**Step 1:**

**Step 2:**

**Step 3:**

**Step 4:**
[color=#31dcbd]
# 如何確認Eclipse的Maven是否有在使用?
首先:
1. 先把Maven專案import進來。
2. 對專案按右鍵,並且確認有Maven選項。

**Note:** Maven裡的**Update Project**會是一個很常用的Option。
# 基本操作
## 加入多個專案
1. File > Open Project from file system
1. 請選 Parent Folder,購選Working Set 再讓他跑起來
**Note:** 這會需要一些時間。你在右下角,應該會看到一個綠色Bar在跑。
**Step 1~2 圖案對照:**
>**Step 1:**

**Step 2:**
 [color=#cbd2ff]
## Maven Run as + Maven Build..操作

1. 在專案上右鍵會看到 **Run As 選項**:
1. 建議打包時都要先 Maven Clean
2. Maven Install
3. Maven Build...
### Maven Build.. > compile (編譯)

### Maven Build.. > clean package (clean + 打包JAR)

**Note:**
用過的**Maven Build.. 到時再Maven Build 可以看到**。
另外打包的檔案,一律都會在 **target folder** 底下。 如果不再target folder, 請看console裡的位子為主(上面會寫path)。
## 執行JAR
請到 Terminal (CMD) 裡去以下指令:
1. cd jarFolder
2. java -jar jarName.jar
## 基本架構
**pom.xml** 基本上釋放dependency的部份 (3rd party/外掛等)
**src/main/java** 基本上都是主要放 java files的目錄
**application-prod-properties** 及 **application.properties** 都是 設定server/spring datasource url(mysql 在這專案)/ spring datasource username/ spring dtasource password/ Dubbo 資料 等.
# 檔案尋找
在上方的Bar找 **Search**,並按下 **Quick Search**。
> [color=orange]
備註:
>請按 3 點那把**CASE SENSITIVE 拿掉**,避免難找東西。 另外要記得,只要是多出一個空格,Eclipse 就會找不到,所以注意不要多空格除非是你想要的。 [color=red]
## 專案找API (備註: 不一定符合每個專案)
1. 使用查詢找 "@RequestMapping " 找出一般的API 定義位子
**Step 1:**
使用 **@RequestMapping** 找出定義的API。 例如我們看到 **/listLiveInfo**,如圖的下方。
>**注意:**
要使用它會是 **http:/domain/live/listLiveInfo**。 在這專案的架構上,他會有一個CLASS為上層,這上層會有一個主要路徑,在這例子為 **live**。 [color=red]
>[color=orange]
**額外例子:**
>/qrcode/generate
rollball-tool > src/main/java > controller > QrcodeController [color=lightblue]
## 找出第三方API (備註: 不一定符合每個專案)
### **STEP 1**
專案第三方API (尤其是籃/足球數據) 查詢方式為:
查詢 **leisu.** (api url 顯示) / **@Value** (找使用 api url 的class)
**範例:**
用 "leisu." 找出 leisu call 的 "leisu.leagueListUrl" 在 constant-url-bbls-prod.properties 檔案裡 (basketballbasicdatatask > resources)
```Java===
//Example
leisu.leagueListUrl=http://xx.xx.com/api/sports/basketball/matchevent/list
```
### **STEP 2**
使用 leisu.leagueListUrl 找出宣告API的地方,在這範例為ConstantUrlBbLsProperties.class。
這時使用 getleagueListUrl (get + 使用名稱)找 就可以找出使用這API 的位子。
>String params = "user="+userAccount+"&secret="+userSecret; [color=purple]
>
>// 1.请求球探接口
>ResultBean httpClientResult = HttpClientUtil.doGet(constantUrlBbLsProperties.getLeagueListUrl()+"?"+params);
# 備註
## Eclipse 提示
Eclipse **很慢**,所以要對它有耐心。
# 問題
## 找不到宣告參數,卻可以使用? (Spring框架專案)
### 方法一
首先看一下是否有以下Import:
```Java=
import org.springframework.stereotype.Service;
```
有的話代表再用Spring框架的注入處理。
一定會想說如果有兩個Class同時繼承同個interface的話,專案會怎麼知道要用哪一個? 首先一定會要被住 **@Autowired** 另外在implement interface的檔案上會有寫 @Service("名稱") 這名稱就會是拿來當被注入的參數名稱。
可以參考以下 StackOverFlow:
https://stackoverflow.com/questions/17424140/spring-is-picking-an-interface-implementation-out-of-many-on-its-own/17424382
### 方法二
首先看一下是否有以下Import有沒有在implement interface的class上:
```java=
import org.apache.dubbo.config.annotation.Service;
```
有的話,這就是使用apache dubbo的注入。
主要會看到的標籤會是 @Reference=(version="x.x") 再注入的地方及 @Service=(version="x.x") 在繼承interface的Class上。 version 對應到就會知道要注入哪一個。
可以參考以下網站:
https://www.jianshu.com/p/e01ae2351dbc