Bạn đã có JDK. Quyết định tiếp theo là dùng editor nào. Java có một điểm khác biệt ở đây: compiler là một chương trình tách rời khỏi editor, nên một editor không biết gì về javac sẽ không cho bạn type checking, không có autocomplete, và không nhảy tới định nghĩa được — cho tới khi bạn chạy build rồi đọc lỗi.
IDE lấp đúng khoảng trống đó bằng cách giữ một compiler chạy nền trên source của bạn trong lúc gõ. Bài này so sánh ba IDE mà người ta thực sự dùng, cài chúng, tạo project đầu tiên bằng IntelliJ IDEA, giải thích từng thư mục mà wizard sinh ra, và đi qua những lỗi setup chặn người mới ngay ngày đầu tiên.
![]()
Toàn bộ nội dung bên dưới được chạy thật trên OpenJDK 21.0.6; mọi thông báo lỗi đều trích nguyên văn từ terminal.
Tại sao Java cần IDE?
Bạn hoàn toàn có thể học Java bằng một text editor và javac, và một bài sau trong series này làm đúng như vậy để bạn thấy IDE đang làm gì thay bạn. Nhưng không ai đi làm theo cách đó, vì bốn lý do rất cụ thể:
- Incremental compilation. IDE compile ngầm sau mỗi lần gõ, nên một lỗi chính tả được gạch đỏ sau khoảng một giây, thay vì sau cả một lượt build.
- Autocomplete hiểu type. Standard library của Java rất lớn và tên thì dài. Autocomplete biết static type của biểu thức ngay tại con trỏ sẽ biến
list.thành một danh sách đã lọc đúng những gìList<String>làm được. - Refactor. Đổi tên một class trong text editor là find-and-replace, và nó sẽ đổi luôn cả chuỗi string trùng tên. Đổi tên trong IDE sửa mọi chỗ tham chiếu, sửa tên file, sửa import — và không đụng vào thứ gì khác.
- Debugger. Gắn debugger thủ công nghĩa là truyền
-agentlib:jdwp=...cho JVM rồi tự nói chuyện với một wire protocol. IDE rút gọn việc đó xuống một cú click vào lề trái.
Về nguyên tắc thì không có gì trong đó chỉ đúng cho Java. Nó quan trọng với Java hơn các ngôn ngữ scripting vì compiler mới là thứ nói cho bạn biết chương trình có đúng hay không, mà compiler thì không nằm trong editor trừ khi bạn tự đưa nó vào.
Nên dùng IDE nào cho Java?
| IntelliJ IDEA Community | IntelliJ IDEA Ultimate | Eclipse IDE | VS Code + Extension Pack for Java | |
|---|---|---|---|---|
| Giá | Miễn phí, Apache 2.0 | Trả phí theo subscription; có bản dùng thử, miễn phí cho sinh viên và dự án OSS | Miễn phí, EPL 2.0 | Miễn phí |
| Mức tiêu tốn bộ nhớ | Nặng — cả IDE chạy trên một JVM | Nặng, hơn Community một chút | Trung bình | Editor nhẹ nhất, nhưng language server cho Java là một process JVM thứ hai |
| Tốc độ indexing | Lần mở đầu index lâu, sau đó rất nhanh | Như Community | Không có index toàn cục kéo dài; builder incremental khởi động nhanh | Index chạy nền; lần đầu có thể chờ một lúc main mới chạy được |
| Hỗ trợ Spring / Jakarta | Không có sẵn | Rất mạnh: Spring, Jakarta EE, JPA, HTTP client | Qua plugin (Spring Tools 4, Eclipse Web Tools) | Qua extension rời (Spring Boot Extension Pack) |
| Maven / Gradle | Có sẵn cả hai, mở project cũ là tự import | Có sẵn cả hai | Maven qua m2e (đi kèm), Gradle qua Buildship | Cả hai qua extension đi kèm |
| Hợp với người mới | Tốt nhất — wizard rõ ràng nhất, inspection giải thích kỹ nhất | Ổn, nhưng bạn chưa cần tới thứ gì trong đó | Dùng được; workspace model và giao diện cũ làm bạn mất thời gian | Tốt nếu bạn vốn đã dùng VS Code; khả năng refactor yếu nhất trong ba |
Hãy dùng IntelliJ IDEA Community Edition. Nó miễn phí, không bắt bạn chọn plugin trước khi tạo được project, và thông báo inspection của nó giải thích vấn đề chứ không chỉ báo đỏ — đó chính là toàn bộ giá trị của một IDE khi bạn còn đang học ngôn ngữ.
Apache NetBeans là lựa chọn thứ tư và thực sự không tệ — miễn phí, Apache 2.0, hỗ trợ Maven và Gradle tốt, kèm một GUI builder cho Swing nếu bạn cần. Nó chỉ nằm ở mức chú thích tại đây vì cộng đồng nhỏ hơn nhiều, nên khi bạn dán một lỗi lên công cụ tìm kiếm, thứ bạn nhận về sẽ là câu trả lời cho IntelliJ và Eclipse.
Cài đặt IntelliJ IDEA, Eclipse và VS Code
Chỉ cần cài một. Hai cái còn lại có mặt ở đây để sau này bạn theo dõi được màn hình của đồng nghiệp.
IntelliJ IDEA: tải trực tiếp hay dùng JetBrains Toolbox
Hai đường:
- Tải trực tiếp từ trang JetBrains. Chọn bản Community Edition đúng OS và đúng CPU — trên máy Apple silicon phải lấy bản aarch64, không phải bản Intel, nếu không IDE chạy qua lớp giả lập và rất ì. Bộ cài
.exetrên Windows có hỏi thêm vềPATHvà file association; cả hai đều không bắt buộc. - JetBrains Toolbox App, một launcher nhỏ lo việc cài, cập nhật và quay lui phiên bản cho mọi IDE của JetBrains. Chọn đường này nếu bạn định dùng nhiều sản phẩm JetBrains hoặc muốn khỏi lo update. Cái giá là thêm một process chạy nền.
Cả hai đường đều không cài JDK giúp bạn, nhưng IntelliJ có thể tải một JDK ngay trong hộp thoại New Project nếu nó không tìm thấy cái nào.
Eclipse: dùng installer hay bản đóng gói sẵn
Cũng hai đường, và khác biệt ở đây đáng chú ý hơn ở IntelliJ:
- Eclipse Installer (
eclipse-inst) hỏi bạn muốn bản nào rồi mới tải về. Chọn Eclipse IDE for Java Developers — gói nhỏ nhất mà vẫn đủ dùng. Các mục còn lại kèm theo tooling cho C++, PHP hay Jakarta EE mà bạn sẽ không đụng tới. - Bản đóng gói sẵn, là file
.zip/.tar.gz/.dmgcủa chính bản đó. Giải nén rồi chạy. Không có gì được ghi ra ngoài thư mục đó, nên bạn giữ song song hai phiên bản Eclipse rất dễ.
Lần chạy đầu tiên Eclipse hỏi thư mục workspace. Đó không phải là project — xem phần Eclipse ở dưới.
VS Code: Extension Pack for Java
VS Code không hỗ trợ Java sẵn. Hãy cài Extension Pack for Java (publisher là Microsoft), thực chất là một gói gồm sáu extension:
| Extension | Nhiệm vụ |
|---|---|
| Language Support for Java™ by Red Hat | Language server: compile, báo lỗi, completion, refactor |
| Debugger for Java | Breakpoint, step, xem giá trị biến |
| Test Runner for Java | Chạy và báo cáo test JUnit, TestNG |
| Maven for Java | Cây project Maven, lifecycle goal, archetype |
| Project Manager for Java | View Java Projects, source root, referenced libraries |
| IntelliCode | Gợi ý completion có xếp hạng |
⚠️ Language server của Red Hat bản thân nó là một chương trình Java và cần JDK 17 trở lên để chạy, tách biệt hoàn toàn với JDK mà project của bạn nhắm tới. Nếu máy bạn chỉ có JDK 11 thì extension sẽ không khởi động. Trỏ nó sang một JDK mới bằng setting
java.jdt.ls.java.home, còn JDK của project thì khai báo riêng trongjava.configuration.runtimes.
Tạo project đầu tiên trong IntelliJ IDEA
Theo đường menu, từ màn hình welcome hoặc từ File | New | Project…:
- Ở cột trái của hộp thoại New Project, chọn New Project (mục Java thuần — không phải Maven Archetype, không phải Spring).
- Name:
demo. Location: nơi bạn để code. IntelliJ tạo<location>/demo. - Language: Java.
- Build system: IntelliJ, Maven hoặc Gradle. Chọn IntelliJ.
- JDK: chọn JDK bạn đã cài. Nếu danh sách rỗng, mở ra và chọn Download JDK….
- Cứ để Add sample code được tick, và bỏ tick Create Git repository nếu bạn chưa cần.
- Create.
Về lựa chọn build system: IntelliJ nghĩa là IDE tự compile project, không có file build nào cả — đó là câu trả lời đúng cho một project không có dependency và không rời khỏi máy bạn. Maven và Gradle thêm một file build (pom.xml hoặc build.gradle) để khai báo dependency và build được project mà không cần IDE — cần thiết ngay khi bạn thêm thư viện bên thứ ba hoặc đưa vào CI, và nên chuyển sang lúc đó chứ không phải bây giờ.
Khi Add sample code được tick, IntelliJ sinh ra một class Main với method main in ra một lời chào. Nội dung cụ thể thay đổi theo phiên bản IntelliJ; phần luôn giống nhau là bộ khung:
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Từng chữ trong file đó có ý nghĩa gì là nội dung của bài tiếp theo. Còn bây giờ nó chỉ là thứ IDE vừa sinh ra để có cái mà chạy.
Cấu trúc project và ý nghĩa từng thư mục
Một project Java do IntelliJ tự build có cấu trúc rất gọn:
demo/
.idea/ config của IDE
src/ source root — các file .java của bạn
out/ file .class sau khi compile
demo.iml định nghĩa module
Nếu chọn Maven hoặc Gradle, bạn nhận được cấu trúc mà phần còn lại của thế giới Java đang dùng:

| Đường dẫn | Chứa gì |
|---|---|
src/main/java | Source chính. Đây là source root: tên package được tính tương đối so với nó. |
src/main/resources | File chương trình đọc lúc runtime — .properties, .json, template. Quá trình build copy chúng nằm cạnh các class để chúng có mặt trên classpath. |
src/test/java | Class test. Là một source root riêng, nên test nhìn thấy code chính còn chiều ngược lại thì không. |
out/ hoặc target/classes | Kết quả compile — mỗi class một file .class, đặt trong các thư mục phản chiếu đúng package. Không sửa tay, không commit. |
.idea/ | Trạng thái riêng của IntelliJ: misc.xml (project SDK và language level), modules.xml, compiler.xml, và workspace.xml chứa trạng thái giao diện của từng người nên để ngoài version control. |
Thư mục resources hay làm người ta vấp: file phải lên được classpath chứ không chỉ nằm trên đĩa. Nếu nó không được copy, getResourceAsStream trả về null và bạn thấy cái này thay vì một lỗi thiếu file:
Exception in thread "main" java.lang.NullPointerException: inStream parameter is null
Quy tắc làm hỏng project đầu tiên của mọi người
Package của một class phải khớp với đường dẫn thư mục chứa nó, tính từ source root. File nằm ở src/main/java/com/example/App.java bắt buộc phải mở đầu bằng package com.example;, không được là gì khác.
Compiler cho thấy điều đó rất rõ. Compile đúng cấu trúc thì class rơi đúng chỗ mà package đã khai:
javac -d out src/main/java/com/example/App.java
java -cp out com.example.App
Hello, World!
Cờ -d out không bỏ class thẳng vào out/ — nó dựng lại nguyên đường dẫn package bên dưới:
out/com/example/App.class
Giờ phá nó đi. Chuyển Greeter.java lên thẳng source root trong khi vẫn khai package com.example;, rồi compile class đang dùng nó:
javac -d out -sourcepath src/main/java src/main/java/com/example/Main.java
src/main/java/com/example/Main.java:5: error: cannot find symbol
System.out.println(Greeter.greet("World"));
^
symbol: variable Greeter
location: class Main
1 error
Compiler đi tìm com.example.Greeter dưới src/main/java/com/example/, vì tên package nói rằng nó phải nằm ở đó, và không thấy. IntelliJ báo đúng tình trạng này dưới dạng Cannot resolve symbol 'Greeter', kèm một cảnh báo ngay trên dòng package.
Hai lỗi họ hàng cũng sinh ra từ chính quy tắc đó. Một public class có tên không trùng tên file thì bị từ chối thẳng:
src/main/java/com/example/Greeting.java:3: error: class Greeter is public, should be declared in a file named Greeter.java
public class Greeter {
^
1 error
Và một class đã compile mà chạy từ sai gốc classpath sẽ hỏng lúc load, với thông báo chỉ đích danh chỗ lệch:
java -cp out/com/example App
Error: Could not find or load main class App
Caused by: java.lang.NoClassDefFoundError: App (wrong name: com/example/App)
File class nhớ package mà nó được compile cùng. Hãy trỏ classpath vào thư mục chứa com/, đừng bao giờ trỏ thẳng vào thư mục package.
Chạy chương trình
Mở Main.java. Một tam giác xanh xuất hiện ở lề trái, cạnh khai báo class và cạnh main. Bấm vào đó rồi chọn Run 'Main.main()'.
Ba việc xảy ra. IntelliJ compile module ra out/production/demo, nó lặng lẽ tạo một run configuration tên Main, và mở cửa sổ Run ở dưới cùng để hiện output. Run configuration giờ đã nằm trong dropdown ở thanh công cụ góc trên bên phải, nên những lần chạy sau chỉ tốn một cú click hoặc một phím tắt — bạn không cần quay lại cái tam giác đó nữa.

Không có gì huyền bí ở đây: mỗi bước đều ứng với một argument mà một bài sau trong series này sẽ tự gõ tay cho javac và java.
Cửa sổ Run hiện dòng lệnh đầy đủ ở trên cùng, System.out và System.err của chương trình xen kẽ nhau, và exit code ở cuối:
Process finished with exit code 0
Exit code khác 0 hoặc một stack trace nghĩa là chương trình chết; stack trace trong cửa sổ đó bấm được, mỗi frame nhảy thẳng tới dòng tương ứng.
Program arguments
main(String[] args) nhận đúng những gì được truyền trên dòng lệnh. Trong IDE, chỗ để điền là run configuration: Run | Edit Configurations…, chọn configuration Main, rồi điền vào ô Program arguments. Gõ alpha beta cho ra kết quả y hệt việc truyền chúng cho java:
java -cp out com.example.App alpha beta
Hello, World!
arg: alpha
arg: beta
Ô VM options ngay bên cạnh là chuyện khác: những giá trị đó đi vào JVM (-Xmx512m, các property -D), không đi vào chương trình của bạn.
Đặt breakpoint và step một dòng
Bấm vào lề trái, ngay số dòng của lệnh System.out.println — một chấm đỏ hiện ra. Giờ chạy đúng configuration đó bằng Debug thay vì Run.
Chương trình dừng lại trước khi dòng đó chạy. Cửa sổ Debug hiện call stack bên trái và toàn bộ biến đang trong scope bên phải, gồm cả args. Bấm F8 để step qua một dòng và nhìn output hiện ra; F7 thì step vào trong method được gọi; F9 chạy tiếp tới breakpoint kế. Bỏ breakpoint bằng cách bấm lại vào chấm đỏ.
Vòng lặp chỉ có vậy, và nó thay thế phần lớn kiểu debug bằng System.out.println mà bạn sẽ phải viết nếu không có nó.
Những settings nên đổi ngay ngày đầu
Mở settings bằng Cmd+, trên macOS hoặc Ctrl+Alt+S trên Windows và Linux.
| Setting | Ở đâu | Vì sao |
|---|---|---|
| Cỡ font editor | Editor → Font | Mặc định khá nhỏ trên màn hình lớn; 14–16pt là cỡ làm việc bình thường. |
| Add unambiguous imports on the fly | Editor → General → Auto Import | Gõ List là tự thêm import java.util.List; mà không cần popup. Bật luôn Optimize imports on the fly ngay bên cạnh để bỏ import thừa. |
| Show whitespaces | Editor → General → Appearance | Làm một dấu tab lạc vào file dùng space trở nên nhìn thấy được, thay vì thành chuyện bí ẩn. |
| File encodings → UTF-8 | Editor → File Encodings | Đặt Global, Project và Default encoding for properties files đều là UTF-8; chỉ tick Transparent native-to-ASCII conversion nếu buộc phải sửa file .properties cũ. |
| Code style | Editor → Code Style → Java | Mặc định đã theo đúng convention của Java: 4 space, không dùng tab. Cứ để nguyên, và reformat bằng Cmd+Alt+L / Ctrl+Alt+L trước mỗi lần commit. |
Về encoding: từ JDK 18, charset mặc định của JVM là UTF-8 trên mọi nền tảng (JEP 400). Trên JDK 21 dùng cho bài này, một chương trình in ra:
file.encoding = UTF-8
native.encoding = UTF-8
Setting trong IDE vẫn quan trọng, vì nó quyết định editor ghi byte ra đĩa theo kiểu nào, và vì javac trên các JDK cũ hơn đọc source theo charset mặc định của hệ thống trừ khi bạn truyền -encoding UTF-8.
Những shortcut IntelliJ nên thuộc trước
Đây là mặc định của keymap macOS và keymap Windows.
| Thao tác | macOS | Windows / Linux |
|---|---|---|
| Chạy configuration hiện tại | Ctrl+R | Shift+F10 |
| Chạy thứ đang ở dưới con trỏ | Ctrl+Shift+R | Ctrl+Shift+F10 |
| Debug configuration hiện tại | Ctrl+D | Shift+F9 |
| Reformat code | Cmd+Alt+L | Ctrl+Alt+L |
| Optimize imports | Cmd+Alt+O | Ctrl+Alt+O |
| Đổi tên (refactor) | Shift+F6 | Shift+F6 |
| Nhảy tới khai báo | Cmd+B | Ctrl+B |
| Tìm nơi sử dụng | Alt+F7 | Alt+F7 |
| Search everywhere | Shift, Shift | Shift, Shift |
Generate (constructor, getter, toString) | Cmd+N | Alt+Insert |
| Comment / bỏ comment dòng | Cmd+/ | Ctrl+/ |
| Bật tắt breakpoint | Cmd+F8 | Ctrl+F8 |
| Settings | Cmd+, | Ctrl+Alt+S |
Nếu chỉ nhớ được hai, hãy nhớ Search everywhere (bấm Shift hai lần — tìm class, file, setting và cả action trong cùng một ô) và Generate, thứ viết hộ bạn đống boilerplate mà Java vốn nổi tiếng.
Các bước tương đương trong Eclipse và VS Code
Eclipse
Khái niệm trung tâm của Eclipse là workspace: một thư mục chứa các project của bạn cộng thêm thư mục .metadata/ đựng settings của chính Eclipse. Những tùy chọn như formatter hay JRE mặc định gắn với từng workspace chứ không phải toàn cục, nên đổi workspace là đổi luôn settings. Cứ dùng một workspace duy nhất lúc này.
File → New → Java Project. Đặt tên, để nguyên Use default location, chọn JRE, và bỏ tick Create module-info.java file — khai báo module là thứ rắc rối bạn chưa cần. Eclipse tạo ra src/ và bin/ cùng hai file ẩn .project và .classpath, tương đương với .idea/ bên IntelliJ.
Package Explorer bên trái là cây project; lưu ý mặc định nó hiện package dưới dạng tên phẳng kiểu com.example chứ không phải thư mục lồng nhau — tùy chọn Package Presentation → Hierarchical trong menu của view đổi lại điều đó, và giúp bạn nhìn cấu trúc thư mục dễ hơn nhiều khi quy tắc package còn mới với bạn.
Chuột phải vào class → Run As → Java Application, hoặc Ctrl+F11. Vài phím tắt đáng nhớ: Ctrl+Shift+F reformat, Alt+Shift+R đổi tên, F3 mở khai báo, Ctrl+Shift+G tìm nơi tham chiếu, Ctrl+Shift+R mở nhanh file theo tên.
VS Code
VS Code mở thư mục, không mở project. Hãy mở đúng thư mục chứa src/ — cao hơn hoặc thấp hơn một cấp là language server không nhận ra source root. Thư mục có pom.xml hoặc build.gradle ở gốc thì được nhận diện tự động; thư mục trơn thì được coi là project không có build tool, với src/ làm source root.
View Java Projects trong sidebar Explorer liệt kê source root, referenced libraries và JDK đang dùng; nút Create Java Project ở đó là thứ gần nhất với wizard của IntelliJ, hỏi bạn loại project (No build tools, Maven, Gradle) và vị trí lưu.
Phía trên mỗi method main, extension vẽ một code lens Run | Debug. Bấm Run tương đương Ctrl+F5; Debug là F5 và sẽ dừng ở các breakpoint bạn đặt bằng cách bấm vào lề. Format bằng Shift+Alt+F. Khi completion hoặc lỗi không chịu cập nhật, chạy Java: Clean Java Language Server Workspace từ Command Palette — tương đương việc invalidate caches bên IntelliJ.
Xử lý các lỗi setup thường gặp
| Triệu chứng | Nguyên nhân | Cách sửa |
|---|---|---|
Đỏ hết cả file, Cannot resolve symbol 'String' | Chưa đặt project SDK. IntelliJ hiện chữ J đỏ trên module và banner Project SDK is not defined | File → Project Structure → Project → SDK, chọn một JDK. Đặt Language level cho khớp. |
Cannot resolve symbol 'Greeter' với class do chính bạn viết | package của file không khớp thư mục, hoặc file nằm ngoài source root | Chuyển file cho đường dẫn khớp package, hoặc sửa dòng package. Đánh dấu đúng thư mục là Sources Root qua chuột phải → Mark Directory as. |
Error: Could not find or load main class App | Chạy với gốc classpath không phải gốc package | Trỏ classpath vào thư mục chứa com/, không phải vào com/example/. |
NoClassDefFoundError: App (wrong name: com/example/App) | Vẫn là lệch đó, nhưng bị bắt lúc load class — file .class tự ghi nhớ package của nó | Như trên. Nhớ compile lại sau khi chuyển file, đừng chạy bản cũ. |
error: class Greeter is public, should be declared in a file named Greeter.java | Tên public class và tên file khác nhau | Đổi tên file, hoặc đổi tên class bằng Shift+F6 để IDE đổi cả hai. |
Error: Main method not found in class NoMain | Class không có public static void main(String[] args) | Thêm vào, hoặc chạy class có nó. Thông báo đầy đủ trích ở dưới. |
| Code đúng vẫn bị gạch đỏ; completion cũ; IDE bảo một class không tồn tại | Index của IDE lạc hậu, thường sau khi đổi branch hoặc file bị sửa từ bên ngoài | File → Invalidate Caches…, tick Clear file system cache and Local History, rồi Invalidate and Restart. |
Hai dòng đầu thực ra là cùng một tình huống — một thư mục mà IDE chưa bao giờ được cho biết phải đối xử thế nào:

Thông báo thiếu main nói thẳng ra chữ ký mà nó cần, và đó là cách nhanh nhất để phát hiện lỗi gõ kiểu String args thay vì String[] args:
Error: Main method not found in class NoMain, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Hãy để Invalidate Caches làm cách cuối, đừng làm đầu tiên. Nó vứt bỏ index và bắt quét lại từ đầu, với project lớn thì mất vài phút; trong khi lỗi project SDK hay lỗi đường dẫn package khả năng cao hơn nhiều và chỉ mất vài giây để kiểm tra.
FAQ
IntelliJ IDEA Community có đủ không, hay phải mua Ultimate? Community đủ cho toàn bộ series này và cho công việc Java thuần nói chung. Ultimate xứng đáng với giá của nó ở Spring, Jakarta EE, JPA và tooling cho database — những thứ bạn chưa viết tới. Có bản dùng thử miễn phí, và có license miễn phí cho sinh viên và dự án open-source nếu bạn muốn xem thử.
Có IDE với compiler sẵn rồi thì còn cần JDK không?
Vẫn cần. IntelliJ và Eclipse có compiler incremental riêng để báo lỗi trong editor, nhưng chúng compile và chạy dựa trên một JDK do bạn chọn, còn VS Code thì gọi thẳng javac. Không có JDK thì không có project.
Sao class mới tạo đã đỏ lòm khi tôi chưa viết gì?
Gần như luôn là do chưa đặt project SDK, hoặc file không nằm dưới source root. Kiểm tra Project Structure → Project → SDK trước, rồi kiểm tra thư mục chứa src đã được đánh dấu Sources Root chưa.
Mở một project Maven hoặc Gradle có sẵn mà không qua wizard được không?
Được — File → Open rồi chọn pom.xml hoặc build.gradle. IntelliJ import dependency, source root và thư mục output từ file build. Làm vậy với một project Java thuần thì lại ra một module chưa được cấu hình.
out/, target/ và .idea/ có nên đưa vào Git không?
Không, với out/ và target/ — chúng là thứ sinh ra. Với .idea/, hãy commit misc.xml, modules.xml, compiler.xml và các file code style nếu cả team dùng chung settings; luôn loại trừ workspace.xml và shelf/ vì chúng thuộc về từng người.
VS Code có phải lựa chọn tệ cho Java không? Không, chỉ là đánh đổi khác: khởi động nhanh hơn, tốn bộ nhớ ít hơn, nhưng bộ refactor nhỏ hơn và tooling riêng cho Java thì phải tự lắp từ các extension. Nếu bạn vốn sống trong VS Code, Extension Pack for Java là điểm bắt đầu hoàn toàn ổn.
Kết luận
Giờ bạn đã có IDE, có project, và có hình dung về thứ wizard vừa tạo ra: một source root mà cấu trúc thư mục của nó chính là cấu trúc package, một thư mục output phản chiếu lại đúng cấu trúc đó bằng các file .class, và một run configuration nối hai thứ lại. Phần lớn rắc rối trong tuần đầu học Java là một trong ba lỗi bạn vừa thấy — chưa đặt project SDK, package không khớp đường dẫn, hoặc classpath trỏ sai gốc — và mỗi lỗi đều có thông báo nói rõ nó là cái nào.
Bài tiếp theo mở đúng file mà wizard vừa sinh ra và đọc nó từng dòng: viết Hello World từ đầu, và giải phẫu một file .java — public, class, static và String[] args mỗi thứ nghĩa là gì, và vì sao main bắt buộc phải trông đúng như vậy.