diff --git a/app/assets/images/eclipse/breakpoint.png b/app/assets/images/eclipse/breakpoint.png
new file mode 100644
index 0000000..fecc252
Binary files /dev/null and b/app/assets/images/eclipse/breakpoint.png differ
diff --git a/app/assets/images/eclipse/compilation_error.png b/app/assets/images/eclipse/compilation_error.png
new file mode 100644
index 0000000..e6ebe05
Binary files /dev/null and b/app/assets/images/eclipse/compilation_error.png differ
diff --git a/app/assets/images/eclipse/console_output.png b/app/assets/images/eclipse/console_output.png
new file mode 100644
index 0000000..8b8677c
Binary files /dev/null and b/app/assets/images/eclipse/console_output.png differ
diff --git a/app/assets/images/eclipse/content_assist_main.png b/app/assets/images/eclipse/content_assist_main.png
new file mode 100644
index 0000000..d7658b9
Binary files /dev/null and b/app/assets/images/eclipse/content_assist_main.png differ
diff --git a/app/assets/images/eclipse/content_assist_suggest_class.png b/app/assets/images/eclipse/content_assist_suggest_class.png
new file mode 100644
index 0000000..93f3768
Binary files /dev/null and b/app/assets/images/eclipse/content_assist_suggest_class.png differ
diff --git a/app/assets/images/eclipse/content_assist_suggest_method.png b/app/assets/images/eclipse/content_assist_suggest_method.png
new file mode 100644
index 0000000..0e115ff
Binary files /dev/null and b/app/assets/images/eclipse/content_assist_suggest_method.png differ
diff --git a/app/assets/images/eclipse/content_assist_sysout.png b/app/assets/images/eclipse/content_assist_sysout.png
new file mode 100644
index 0000000..ee7706f
Binary files /dev/null and b/app/assets/images/eclipse/content_assist_sysout.png differ
diff --git a/app/assets/images/eclipse/context_generate_getters_setters.png b/app/assets/images/eclipse/context_generate_getters_setters.png
new file mode 100644
index 0000000..b921406
Binary files /dev/null and b/app/assets/images/eclipse/context_generate_getters_setters.png differ
diff --git a/app/assets/images/eclipse/context_generate_hashcode_equals.png b/app/assets/images/eclipse/context_generate_hashcode_equals.png
new file mode 100644
index 0000000..a2dd637
Binary files /dev/null and b/app/assets/images/eclipse/context_generate_hashcode_equals.png differ
diff --git a/app/assets/images/eclipse/context_rename.png b/app/assets/images/eclipse/context_rename.png
new file mode 100644
index 0000000..adce4b6
Binary files /dev/null and b/app/assets/images/eclipse/context_rename.png differ
diff --git a/app/assets/images/eclipse/context_tostring.png b/app/assets/images/eclipse/context_tostring.png
new file mode 100644
index 0000000..6373314
Binary files /dev/null and b/app/assets/images/eclipse/context_tostring.png differ
diff --git a/app/assets/images/eclipse/create_class.png b/app/assets/images/eclipse/create_class.png
new file mode 100644
index 0000000..7f25f1c
Binary files /dev/null and b/app/assets/images/eclipse/create_class.png differ
diff --git a/app/assets/images/eclipse/create_java_project.gif b/app/assets/images/eclipse/create_java_project.gif
new file mode 100644
index 0000000..c69edd0
Binary files /dev/null and b/app/assets/images/eclipse/create_java_project.gif differ
diff --git a/app/assets/images/eclipse/debug_button.png b/app/assets/images/eclipse/debug_button.png
new file mode 100644
index 0000000..0e16e2e
Binary files /dev/null and b/app/assets/images/eclipse/debug_button.png differ
diff --git a/app/assets/images/eclipse/debug_button_in_toolbar.png b/app/assets/images/eclipse/debug_button_in_toolbar.png
new file mode 100644
index 0000000..27f3f2d
Binary files /dev/null and b/app/assets/images/eclipse/debug_button_in_toolbar.png differ
diff --git a/app/assets/images/eclipse/debug_perspective.png b/app/assets/images/eclipse/debug_perspective.png
new file mode 100644
index 0000000..d682536
Binary files /dev/null and b/app/assets/images/eclipse/debug_perspective.png differ
diff --git a/app/assets/images/eclipse/debug_perspective_switch.png b/app/assets/images/eclipse/debug_perspective_switch.png
new file mode 100644
index 0000000..407e6aa
Binary files /dev/null and b/app/assets/images/eclipse/debug_perspective_switch.png differ
diff --git a/app/assets/images/eclipse/debug_resume.png b/app/assets/images/eclipse/debug_resume.png
new file mode 100644
index 0000000..74b903e
Binary files /dev/null and b/app/assets/images/eclipse/debug_resume.png differ
diff --git a/app/assets/images/eclipse/debug_step_into.png b/app/assets/images/eclipse/debug_step_into.png
new file mode 100644
index 0000000..e3ae83c
Binary files /dev/null and b/app/assets/images/eclipse/debug_step_into.png differ
diff --git a/app/assets/images/eclipse/debug_step_over.png b/app/assets/images/eclipse/debug_step_over.png
new file mode 100644
index 0000000..b928ddc
Binary files /dev/null and b/app/assets/images/eclipse/debug_step_over.png differ
diff --git a/app/assets/images/eclipse/debug_toolbar_buttons.png b/app/assets/images/eclipse/debug_toolbar_buttons.png
new file mode 100644
index 0000000..3441f4e
Binary files /dev/null and b/app/assets/images/eclipse/debug_toolbar_buttons.png differ
diff --git a/app/assets/images/eclipse/file_create_project.png b/app/assets/images/eclipse/file_create_project.png
new file mode 100644
index 0000000..a478d33
Binary files /dev/null and b/app/assets/images/eclipse/file_create_project.png differ
diff --git a/app/assets/images/eclipse/getter_setter_modal.png b/app/assets/images/eclipse/getter_setter_modal.png
new file mode 100644
index 0000000..f1a3a70
Binary files /dev/null and b/app/assets/images/eclipse/getter_setter_modal.png differ
diff --git a/app/assets/images/eclipse/hashcode_equals_modal.png b/app/assets/images/eclipse/hashcode_equals_modal.png
new file mode 100644
index 0000000..e482359
Binary files /dev/null and b/app/assets/images/eclipse/hashcode_equals_modal.png differ
diff --git a/app/assets/images/eclipse/install.png b/app/assets/images/eclipse/install.png
new file mode 100644
index 0000000..994474d
Binary files /dev/null and b/app/assets/images/eclipse/install.png differ
diff --git a/app/assets/images/eclipse/java_class_creation.png b/app/assets/images/eclipse/java_class_creation.png
new file mode 100644
index 0000000..06d3368
Binary files /dev/null and b/app/assets/images/eclipse/java_class_creation.png differ
diff --git a/app/assets/images/eclipse/open_problems_view.png b/app/assets/images/eclipse/open_problems_view.png
new file mode 100644
index 0000000..5c32f95
Binary files /dev/null and b/app/assets/images/eclipse/open_problems_view.png differ
diff --git a/app/assets/images/eclipse/problems_view.png b/app/assets/images/eclipse/problems_view.png
new file mode 100644
index 0000000..7955656
Binary files /dev/null and b/app/assets/images/eclipse/problems_view.png differ
diff --git a/app/assets/images/eclipse/problems_view_warning.png b/app/assets/images/eclipse/problems_view_warning.png
new file mode 100644
index 0000000..90a125e
Binary files /dev/null and b/app/assets/images/eclipse/problems_view_warning.png differ
diff --git a/app/assets/images/eclipse/rename_box.png b/app/assets/images/eclipse/rename_box.png
new file mode 100644
index 0000000..8915382
Binary files /dev/null and b/app/assets/images/eclipse/rename_box.png differ
diff --git a/app/assets/images/eclipse/rename_different_text.png b/app/assets/images/eclipse/rename_different_text.png
new file mode 100644
index 0000000..eb1c19c
Binary files /dev/null and b/app/assets/images/eclipse/rename_different_text.png differ
diff --git a/app/assets/images/eclipse/run_as_editor.png b/app/assets/images/eclipse/run_as_editor.png
new file mode 100644
index 0000000..6c97d36
Binary files /dev/null and b/app/assets/images/eclipse/run_as_editor.png differ
diff --git a/app/assets/images/eclipse/run_as_package_explorer.png b/app/assets/images/eclipse/run_as_package_explorer.png
new file mode 100644
index 0000000..0fa6d1c
Binary files /dev/null and b/app/assets/images/eclipse/run_as_package_explorer.png differ
diff --git a/app/assets/images/eclipse/run_button.png b/app/assets/images/eclipse/run_button.png
new file mode 100644
index 0000000..33e46e4
Binary files /dev/null and b/app/assets/images/eclipse/run_button.png differ
diff --git a/app/assets/images/eclipse/run_buttons_toolbar.png b/app/assets/images/eclipse/run_buttons_toolbar.png
new file mode 100644
index 0000000..7a256f4
Binary files /dev/null and b/app/assets/images/eclipse/run_buttons_toolbar.png differ
diff --git a/app/assets/images/eclipse/tostring_options.png b/app/assets/images/eclipse/tostring_options.png
new file mode 100644
index 0000000..e5ea8e6
Binary files /dev/null and b/app/assets/images/eclipse/tostring_options.png differ
diff --git a/app/assets/images/eclipse/warning.png b/app/assets/images/eclipse/warning.png
new file mode 100644
index 0000000..3e7b23b
Binary files /dev/null and b/app/assets/images/eclipse/warning.png differ
diff --git a/app/assets/images/eclipse/welcome.png b/app/assets/images/eclipse/welcome.png
new file mode 100644
index 0000000..c82aa6c
Binary files /dev/null and b/app/assets/images/eclipse/welcome.png differ
diff --git a/app/assets/images/eclipse/workspace_selection.png b/app/assets/images/eclipse/workspace_selection.png
new file mode 100644
index 0000000..306118b
Binary files /dev/null and b/app/assets/images/eclipse/workspace_selection.png differ
diff --git a/app/pages/learn/01_tutorial/01_your-first-java-app/03_building-with-eclipse.md b/app/pages/learn/01_tutorial/01_your-first-java-app/03_building-with-eclipse.md
new file mode 100644
index 0000000..e510d68
--- /dev/null
+++ b/app/pages/learn/01_tutorial/01_your-first-java-app/03_building-with-eclipse.md
@@ -0,0 +1,326 @@
+---
+id: first_app.eclipse
+title: Building a Java Application in the Eclipse IDE
+slug: learn/eclipse
+type: tutorial
+category: start
+layout: learn/tutorial.html
+subheader_select: tutorials
+main_css_id: learn
+toc:
+- Introduction and Installation {intro}
+- Creating a Java Project {creating}
+- Content Assist {content_assist}
+- Running Your Program {run}
+- Dealing With Compilation Errors and Warnings {errors}
+- Debugging {debugging}
+- Generating Code {generating}
+- Refactoring {refactoring}
+- Summary {summary}
+description: "Installing and getting started with the Eclipse IDE for developing Java applications"
+last_update: 2024-04-15
+author: ["DanielSchmid"]
+---
+
+## Introduction and Installation
+
+The Eclipse IDE (or Eclipse for short) is a commonly used application that provides tooling that helps developers write, run and debug Java code. This article describes how to get started with Eclipse for developing Java applications.
+
+The easiest way to install Eclipse is to download and run the Eclipse installer from [this site](https://www.eclipse.org/downloads/packages/installer). This provides multiple options for packages to install. In most cases, `Eclipse IDE for Java Developers` is a good installation for Java development.
+
+[](/assets/images/eclipse/install.png)
+
+After installing Eclipse, you can select a workspace. The workspace is the directory where most projects are located.
+
+[](/assets/images/eclipse/workspace_selection.png)
+
+Upon selecting a workspace, it will show a Welcome screen presenting you with mutliple options. For example, there is an option to start an interactive tutorial that shows you how to create a simple Hello-World application.
+
+[](/assets/images/eclipse/welcome.png)
+
+This article will show you how to create Java projects manually so you can close this Welcome screen by clicking on the `Hide` button on the top right of the Welcome tab.
+
+
+## Creating a Java Project
+
+After installing Eclipse you should have an empty workspace. In order to create a new Java project, click on the `File` toolbar in the top left corner of the Eclipse window and select `New` > `Java Project`.
+
+[](/assets/images/eclipse/file_create_project.png)
+
+This will then open up a dialog window that allows you to configure your project. You will need to enter a name next to `Project name:` at the top. For example, you can choose the name `HelloWorld`. In the `Module` section at the bottom, disable the option `Create module-info.java file`. You can configure a custom Java installation (commonly referred to as the *JDK* or Java Development Kit) in the `JRE` box.
+
+[](/assets/images/eclipse/create_java_project.gif)
+
+This creates a Java project that is shown on the left side of the Eclipse window. When expanding this project, there should be a folder named `src`. Java classes can be created inside this directory by right-clicking on it and selecting `New` > `Class`.
+
+[](/assets/images/eclipse/create_class.png)
+
+This opens a dialog similar to the project creation dialog. It allows specifying various options about the class you want to create. For now, you will need to enter a class name like `HelloWorld`. If you want to, you can also configure a package which can be used to group multiple classes together.
+
+[](/assets/images/eclipse/java_class_creation.png)
+
+
+## Content Assist
+
+Eclipse can help you write Java code by automatically completing parts of it. When pressing the key combination `Ctrl`+`Space` (or `⌘`+`Space` on macOS or `Alt`+`/` on Chinese systems) while editing Java code, Eclipse automatically suggests ways to complete the code. These suggestions can be confirmed by pressing `Enter` or double-clicking on the suggestions.
+
+For example, typing `main` in a class followed by pressing `Ctrl`+`Space` suggests adding a main method.
+
+[](/assets/images/eclipse/content_assist_main.png)
+
+Inside methods, Eclipse can suggest changing `sysout` to a `System.out.println();` statement.
+
+[](/assets/images/eclipse/content_assist_sysout.png)
+
+Furthermore, it can complete class and method names.
+
+[](/assets/images/eclipse/content_assist_suggest_class.png)
+
+[](/assets/images/eclipse/content_assist_suggest_method.png)
+
+
+
+## Running Your Program
+
+In order to run a Java application, you first need to have a class with a `main` method. You can right-click the class in the package explorer or right-click in the editor where you are writing the code for the class and select `Run as` > `Java application`.
+
+[](/assets/images/eclipse/run_as_editor.png)
+
+[](/assets/images/eclipse/run_as_package_explorer.png)
+
+Alternatively, you can run the application using the Run [](/assets/images/eclipse/run_button.png) button in the toolbar. [](/assets/images/eclipse/run_buttons_toolbar.png)
+
+When running the program, Eclipse should show the output of the program in the `Console` view.
+
+[](/assets/images/eclipse/console_output.png)
+
+
+## Dealing with Compilation Errors and Warnings
+
+When Eclipse detects a compilation error, the relevant lines are underlined in red. When hovering over the line with the error or the error icon to the left of the said line, Eclipse provides information about what went wrong and also suggests Quick Fixes which can fix the error. However, in many cases, there are multiple ways to get rid of the error. You need to carefully check whether the suggestions are actually matching what you want to do. After all, IDEs cannot predict your intent.
+
+[](/assets/images/eclipse/compilation_error.png)
+
+Furthermore, Eclipse shows a list of errors in the `Problems` view. If this view is not displayed, it can be shown using the menu `Window` > `Show View` > `Problems`.
+
+[](/assets/images/eclipse/open_problems_view.png)
+
+[](/assets/images/eclipse/problems_view.png)
+
+As with Errors, Eclipse can also detect code that compiles but likely contains some issues or is pointless. In this case, Eclipse will display a warning.
+
+[](/assets/images/eclipse/warning.png)
+
+[](/assets/images/eclipse/problems_view_warning.png)
+
+
+## Debugging
+
+When a program doesn't do what you expect it to do, you might want to debug it. The process of debugging is explained in [this article](id:debugging). Eclipse provides a lot of functionality making it easy to debug Java applications.
+
+In order to debug an application, you need to set a breakpoint. When the program gets to executing the line with the breakpoint, it will temporarily stop ("suspend"), allow you to inspect its current state and step through the program. To set a breakpoint, you need to double-click on the area to the left of the line you want to suspend the program at. After doing that, a blue dot should appear there.
+
+[](/assets/images/eclipse/breakpoint.png)
+
+When running a program normally, it will ignore all breakpoints. For debugging, you need to run the program in debug mode. This can be done by clicking on the green button with the bug icon [](/assets/images/eclipse/debug_button.png) next to the run button or using `Debug As` > `Java Application`.
+
+[](/assets/images/eclipse/debug_button_in_toolbar.png)
+
+When the program execution gets to a breakpoint in debug mode, Eclipse will ask you to switch to the Debug perspective. This perspective gives you more information about the program you are currently debugging so you likely want to do this and click on the `Switch` button.
+
+[](/assets/images/eclipse/debug_perspective_switch.png)
+
+Upon opening the debug perspective, you should still see your code in the middle. However, there should be one line with a green background next to the breakpoint. This indicates the next line the program would execute. On the right side, you should see a `Variables` view containing a list of variables and their current values.
+
+[](/assets/images/eclipse/debug_perspective.png)
+
+While the program is suspended, you can tell it how to continue executing using buttons in the toolbar at the top.
+[](/assets/images/eclipse/debug_toolbar_buttons.png)
+You can execute one line using `Step Over` [](/assets/images/eclipse/debug_step_over.png) (`F6`), go into a method using `Step Into` [](/assets/images/eclipse/debug_step_into.png) (`F5`) or continue executing the program until the next breakpoint with `Resume` [](/assets/images/eclipse/debug_resume.png) (`F8`).
+
+
+## Generating Code
+
+Sometimes you might need to write repetitive code that doesn't contain much business logic and can be generated using information from existing code. An example of this is getters/setters or `equals`/`hashCode`/`toString` methods which typically just need to access some fields. While it is often preferable to use [records](/learn/records), Eclipse allows comes with functionality to generate these pieces of repetitive code.
+
+In order to do this, you first need to create a class with some fields you want to generate these methods for. In this example, we will create a `Person` class that stores the first name, last name and age of a person.
+```java
+public class Person {
+ private String firstName;
+ private String lastName;
+ private int age;
+ //we want to generate code here
+
+}
+```
+
+When right-clicking in that class, there is an option called `Source` providing various ways to generate code. Here, we can select `Generate Getters and Setters...` in order to generate accessor methods for the fields in the `Person` class.
+
+[](/assets/images/eclipse/context_generate_getters_setters.png)
+
+This option should open up a new window allowing us to configure which fields we want to generate accessors for. In order to create accessors for all fields, use the `Select All` button. and click `Generate` on the bottom right.
+
+[](/assets/images/eclipse/getter_setter_modal.png)
+
+After doing this, the class should look as follows:
+```java
+public class Person {
+ private String firstName;
+ private String lastName;
+ private int age;
+ //we want to generate code here
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public int getAge() {
+ return age;
+ }
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+}
+```
+
+Similarly, it is possible to generate the `hashCode` and `equals` methods using the menu `Source` > `Generate hashCode() and equals()...`.
+
+[](/assets/images/eclipse/generate_hashcode_equals.png)
+
+This also opens a window which allows to select the fields to include in the `hashCode` and `equals` methods.
+[](/assets/images/eclipse/hashcode_equals_modal.png)
+
+After clicking `Generate`, Eclipse automatically adds these methods to the class.
+```java
+import java.util.Objects;
+
+public class Person {
+ private String firstName;
+ private String lastName;
+ private int age;
+ //we want to generate code here
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public int getAge() {
+ return age;
+ }
+ public void setAge(int age) {
+ this.age = age;
+ }
+ @Override
+ public int hashCode() {
+ return Objects.hash(age, firstName, lastName);
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Person other = (Person) obj;
+ return age == other.age && Objects.equals(firstName, other.firstName)
+ && Objects.equals(lastName, other.lastName);
+ }
+
+}
+```
+
+Another method that is often generated is `toString()` which returns a `String` representation of the object.
+To generate that method, select `Generate toString()...` in the `Source` menu.
+
+[](/assets/images/eclipse/context_tostring.png)
+
+As before, this opens a window allowing to specify options on how exactly the code should be generated.
+
+[](/assets/images/eclipse/tostring_options.png)
+
+Using the `Generate` button, Eclipse generates the `toString` method as it did with the other methods before.
+```java
+import java.util.Objects;
+
+public class Person {
+ private String firstName;
+ private String lastName;
+ private int age;
+ //we want to generate code here
+ public String getFirstName() {
+ return firstName;
+ }
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+ public String getLastName() {
+ return lastName;
+ }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+ public int getAge() {
+ return age;
+ }
+ public void setAge(int age) {
+ this.age = age;
+ }
+ @Override
+ public int hashCode() {
+ return Objects.hash(age, firstName, lastName);
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Person other = (Person) obj;
+ return age == other.age && Objects.equals(firstName, other.firstName)
+ && Objects.equals(lastName, other.lastName);
+ }
+ @Override
+ public String toString() {
+ return "Person [firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + "]";
+ }
+
+}
+```
+
+
+
+## Refactoring
+
+When working on Java applications, it is often necessary to change existing code in various ways while preserving functionality. Eclipse supports developers doing that by providing various refactoring options. An example of that is renaming class, methods or fields. This can be done by clicking on a class, method or variable name, right-clicking and selecting `Refactor` > `Rename`.
+
+[](/assets/images/eclipse/context_rename.png)
+
+It is then possible to change to name to something different and confirming it using the `Enter` key. This also updates all references to the renamed element.
+
+[](/assets/images/eclipse/rename_box.png)
+
+[](/assets/images/eclipse/rename_different_text.png)
+
+
+
+## Summary
+
+As you can see, the Eclipse IDE provides a lot of tools that help developers write Java applications. While this article shows some, Eclipse comes with many more features that can be especially useful when working on bigger applications. If you are interested in reading more, check out the [Java Development user guide](https://help.eclipse.org/latest/index.jsp?nav=%2F1).
\ No newline at end of file