Visual Studio CodeでのJava開発環境の基本

# やりたいこと

- [x] JavaのVersion管理
- [x] チェックスタイル
- [x] TestをIDE上で実行
- [x] DebugをIDE上で実行
- [x] 環境変数の設定
- [x] BreakpointでのDebug

# Java Runtime

https://code.visualstudio.com/docs/java/java-tutorial#_using-java-runtime-configuration-wizard

`java.home` in `settings.json`

`Command + Shift + P`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/11938572-95ea-591f-71fe-f084351172a1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/8c48da84-7668-326a-a654-4da616a4a82b.png)

# Checkstyle

`check_style.xml` があれば、右クリックして `set the Checkstyle Configuration file`をクリックする

![スクリーンショット 2021-08-04 11.53.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/850905d0-6c57-e9d7-d941-4732bcd00089.png)

- https://marketplace.visualstudio.com/items?itemName=shengchen.vscode-checkstyle
- https://checkstyle.sourceforge.io/beginning_development.html <- 残念ながらVSCodeがない

```json:settings.json
"java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml",
```

一点不明なのが、なぜかVSCodeだと以下のようにフォーマットされるが、
```java
  public int distinctValues(String fldname) {
    if (p1.schema().hasField(fldname))
      return p1.distinctValues(fldname);
    else
      return p2.distinctValues(fldname);
  }
```

Google Java Formatだと以下のようになってしまう (CIとずれてしまい困る..多分VSCode側が変?)

```java
  public int distinctValues(String fldname) {
    if (p1.schema().hasField(fldname)) return p1.distinctValues(fldname);
    else return p2.distinctValues(fldname);
  }
```


# Test

[Test Runner for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test) というExtentionをインストールして上のRuntimeがちゃんと設定できていれば、VSCode上でテストが実行できる




# Debugする

「実行とデバッグ」のアイコンをクリックすると以下のように出るので、

![Screen Shot 2023-02-11 at 16.07.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/11f94701-0a4f-bfdd-3f03-2ec9fd2aed68.png)

「launch.jsonファイルを作成します」をクリックする。
環境変数`env`や引数`args`などを設定する。詳細は[java debugging](https://code.visualstudio.com/docs/java/java-debugging)


```json:launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: 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 SampleApplication",
            "request": "launch",
            "mainClass": "com.nakamasato.testapp.SampleApplication",
            "projectName": "testapp",
            "env":{
                "TEST_ENV": "value"
            }
        }
    ]
}
```

# BreakpointでのDebug

1. Breakpointをつける

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/b0d0a6ca-6d75-9cf8-ec9a-7ab1465a56a3.png)

1. DebugでRunする
1. 確認

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7059/55afcf9e-b333-a85b-f668-75b45d795bc6.png)

# 感想

- 一通り設定はできた
- intellijの方がJava開発にはいいと聞くのでいつか比較も

# 参考

1. https://medium.com/@tariqul.islam.rony/learning-java-and-spring-boot-with-visual-studio-code-vscode-part-1-54073f2fa264
1. https://code.visualstudio.com/docs/editor/debugging
1. https://github.com/diffplug/spotless/tree/main/plugin-gradle
1. https://tech.excite.co.jp/entry/2022/09/05/162416
1. https://medium.com/@anirudhramesh95/enforcing-formatting-standards-for-your-java-project-using-gradle-2c21172743e5