Java Development Setup, SDKMAN, Gradle, VS Code
· 約2分
SDKMAN! is a popular Java version manager for developers. It allows you to easily install, switch between, and manage multiple Java versions and development tools.
Install SDKMAN!
# install
curl -s "https://get.sdkman.io" | bash
# init
source "$HOME/.sdkman/bin/sdkman-init.sh"
Install Java
# list available Java versions
sdk list java
# Install Java 21
sdk install Java 21.0.1-tem
# Set as default
sdk default java 21.0.1-tem
# Verify installation
java -version
Fix JAVA_HOME Environment Variable
SDKMAN! sometimes doesn't set JAVA_HOME automatically. Add this to your shell configuration:
# For zsh (default on newer macOS)
echo 'export JAVA_HOME="$SDKMAN_DIR/candidates/java/current"' >> ~/.zshrc
echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Verify JAVA_HOME is set
echo $JAVA_HOME
Install Gradle
sdk install gradle
gradle --verion
Install Spring boot
sdk install springboot
Start coding Java with VSCode
Install the Extension Pack for Java which includes 7 essential extensions:
- Language Support for Java
- Debugger for Java
- Test Runner for Java
- Maven for Java
- Project Manager for Java
- Visual Studio IntelliCode
- Gradle for Java
Update user settings: Command + Shift + P > Open user settings (JSON) with the following settings:
{
// Java Runtime Configuration
"java.jdt.ls.java.home": "${env:JAVA_HOME}",
"java.configuration.runtimes": [
{
"name": "JavaSE-21",
"path": "${env:JAVA_HOME}",
"default": true
}
],
// Java Language Server Settings
"java.configuration.detectJdksAtStart": true,
"java.configuration.updateBuildConfiguration": "automatic",
"java.server.launchMode": "Standard",
"java.autobuild.enabled": true,
"java.maxConcurrentBuilds": 1,
// Code Completion and Analysis
"java.completion.enabled": true,
"java.completion.guessMethodArguments": true,
"java.completion.favoriteStaticMembers": [
"org.junit.jupiter.api.Assertions.*",
"org.mockito.Mockito.*",
"org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*",
"org.springframework.test.web.servlet.result.MockMvcResultMatchers.*"
],
"java.compile.nullAnalysis.mode": "automatic",
"java.sources.organizeImports.staticStarThreshold": 5,
"java.sources.organizeImports.starThreshold": 5,
// Code Formatting
"java.format.enabled": true,
"java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml",
"java.format.settings.profile": "GoogleStyle",
"java.format.comments.enabled": true,
// Gradle Settings
"java.import.gradle.enabled": true,
"java.import.gradle.wrapper.enabled": true,
"java.import.gradle.offline.enabled": false,
"java.import.gradle.arguments": "--refresh-dependencies",
"gradle.javaDebug.cleanOutput": true,
"gradle.debug": false,
// Testing
"java.test.defaultConfig": "",
"java.test.config": {},
// Debugging
"java.debug.logLevel": "warn",
"java.debug.settings.enableRunDebugCodeLens": true,
"java.debug.settings.showHex": false,
"java.debug.settings.showStaticVariables": false,
"java.debug.settings.showQualifiedNames": false,
"java.debug.settings.maxStringLength": 0,
"java.debug.settings.exceptionBreakpoint.skipClasses": [
"$JDK",
"junit.*",
"org.junit.*",
"org.springframework.*"
],
// Code Lens
"java.references.includeAccessors": true,
"java.references.includeDecompiledSources": true,
"java.implementationsCodeLens.enabled": true,
"java.referencesCodeLens.enabled": true,
// Error Reporting and Telemetry
"java.errors.incompleteClasspath.severity": "warning",
"java.telemetry.enabled": false,
// Performance
"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m",
// Code Completion Filtering (keep packages you don't commonly use out of suggestions)
"java.completion.filteredTypes": [
"java.awt.*",
"com.sun.*",
"sun.*",
"jdk.*",
"org.graalvm.*",
"io.micrometer.shaded.*",
"javax.swing.*"
],
// Spring Boot specific (useful for microservices)
"spring-boot.ls.checkjvm": false,
"spring.initializr.defaultLanguage": "Java",
"spring.initializr.defaultJavaVersion": "21",
"spring.initializr.defaultPackaging": "Jar",
}