File size: 4,662 Bytes
292d92c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# Install SDKMAN on Linux

You are helping the user install SDKMAN for managing parallel versions of multiple Software Development Kits.

## Your tasks:

1. **Check if SDKMAN is already installed:**
   - Check: `sdk version` or `which sdk`
   - Check for SDKMAN directory: `ls -la ~/.sdkman`
   - If already installed, ask if they want to update it

2. **Check prerequisites:**
   SDKMAN requires:
   - curl: `curl --version`
   - zip/unzip: `which zip unzip`
   - bash or zsh shell

   Install missing prerequisites:
   ```bash
   sudo apt update
   sudo apt install curl zip unzip
   ```

3. **Download and install SDKMAN:**
   ```bash
   curl -s "https://get.sdkman.io" | bash
   ```

   The installer will:
   - Install to `~/.sdkman`
   - Add initialization to ~/.bashrc or ~/.zshrc
   - Set up sdk command

4. **Initialize SDKMAN in current shell:**
   ```bash
   source "$HOME/.sdkman/bin/sdkman-init.sh"
   ```

5. **Verify installation:**
   ```bash
   sdk version
   sdk help
   ```

6. **Show available SDKs:**
   ```bash
   sdk list
   ```

   Common SDKs available:
   - Java (various distributions: OpenJDK, Graal, Corretto, etc.)
   - Gradle
   - Maven
   - Kotlin
   - Scala
   - Groovy
   - Spring Boot
   - Micronaut
   - And many more

7. **Install a few common SDKs (ask user first):**

   **Java:**
   ```bash
   sdk list java
   sdk install java  # installs latest stable
   # Or specific version:
   # sdk install java 17.0.9-tem
   ```

   **Gradle:**
   ```bash
   sdk install gradle
   ```

   **Maven:**
   ```bash
   sdk install maven
   ```

8. **Show basic SDKMAN usage:**
   Explain to the user:
   - `sdk list <sdk>` - List available versions of an SDK
   - `sdk install <sdk> <version>` - Install specific version
   - `sdk install <sdk>` - Install latest stable
   - `sdk uninstall <sdk> <version>` - Remove a version
   - `sdk use <sdk> <version>` - Use version for current shell
   - `sdk default <sdk> <version>` - Set default version
   - `sdk current <sdk>` - Show current version in use
   - `sdk current` - Show all current versions
   - `sdk upgrade <sdk>` - Upgrade to latest version
   - `sdk update` - Update SDK list
   - `sdk selfupdate` - Update SDKMAN itself

9. **Configure SDKMAN (optional):**
   Edit `~/.sdkman/etc/config`:

   ```bash
   # Auto answer 'yes' to all prompts
   sdkman_auto_answer=true

   # Automatically use Java version from .sdkmanrc
   sdkman_auto_env=true

   # Check for SDK updates on login
   sdkman_checkup_enable=true

   # Automatically selfupdate
   sdkman_selfupdate_enable=true
   ```

10. **Set up project-specific SDK versions:**
    Create `.sdkmanrc` file in project root:
    ```bash
    java=17.0.9-tem
    gradle=8.4
    maven=3.9.5
    ```

    Enable auto-env: `sdk env` or `sdk env install`

11. **Verify PATH and environment:**
    ```bash
    which java
    java -version
    echo $JAVA_HOME
    ```

12. **Show how to switch Java versions:**
    Demonstrate:
    ```bash
    sdk list java
    sdk install java 11.0.21-tem
    sdk install java 17.0.9-tem
    sdk use java 11.0.21-tem
    java -version
    sdk default java 17.0.9-tem
    ```

13. **Offline mode (optional):**
    Explain offline mode for when internet is unavailable:
    ```bash
    sdk offline enable
    sdk offline disable
    ```

14. **Flush and clean:**
    ```bash
    sdk flush  # Clear caches
    sdk flush temp  # Clear temporary files
    ```

15. **Provide best practices:**
    - Run `sdk update` regularly to refresh SDK lists
    - Run `sdk selfupdate` to keep SDKMAN current
    - Use `sdk current` to verify active versions
    - Use `.sdkmanrc` files for project-specific versions
    - Enable `sdkman_auto_env` for automatic version switching
    - Use `sdk env` when entering project directories
    - Keep multiple Java versions for different projects
    - Set sensible defaults with `sdk default`
    - SDKMAN doesn't require sudo
    - Check `~/.sdkman/candidates/` to see installed SDKs

16. **Troubleshooting:**
    - If `sdk` command not found, source the init script
    - Check `~/.bashrc` has SDKMAN initialization
    - Restart shell or source bashrc: `source ~/.bashrc`
    - Check PATH: `echo $PATH | grep sdkman`
    - Verify SDKMAN directory exists: `ls ~/.sdkman`

## Important notes:
- SDKMAN is user-level, doesn't require sudo
- Each SDK version is kept separate in `~/.sdkman/candidates/`
- Can coexist with system Java or other installation methods
- Using `sdk use` only affects current shell
- Using `sdk default` affects all new shells
- .sdkmanrc files are project-specific
- SDKMAN is particularly popular in JVM ecosystem
- Bash completion is included