From 523461e73f14c254e797d8e63ec287bc28a019cc Mon Sep 17 00:00:00 2001 From: satorus Date: Wed, 13 May 2026 14:19:09 +0200 Subject: [PATCH 1/7] #1918: Add documentation on how to run IDEasy locally using intellij --- .../contributing/run-ideasy-locally.adoc | 38 ++++++++++++++++ documentation/contributing/setup.adoc | 42 +++++++++++------- .../run_button_main_method.png | Bin 0 -> 4298 bytes .../run_ide_locally_guide/run_button_menu.png | Bin 0 -> 8152 bytes .../run_config_example.png | Bin 0 -> 46714 bytes 5 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 documentation/contributing/run-ideasy-locally.adoc create mode 100644 documentation/images/run_ide_locally_guide/run_button_main_method.png create mode 100644 documentation/images/run_ide_locally_guide/run_button_menu.png create mode 100644 documentation/images/run_ide_locally_guide/run_config_example.png diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc new file mode 100644 index 0000000000..12e8422ff0 --- /dev/null +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -0,0 +1,38 @@ += Run IDEasy locally + +In order to test changes you did locally in your feature branch, there is a need for running IDEasy locally from the branch with the local changes applied. +To achieve this, there are multiple options. The first would be to run IDEasy from inside Intellij, which also enables debugging with breakpoints and many more features. + +== Run IDEasy locally from inside Intellij + +The entrypoint for running your local changes of IDEasy is the main-method in the cli-subfolder. Since most of the functionality of IDEasy is located in the cli-submodule, this will cover nearly all the local running/testing needs. +The main-method is located in `com.devonfw.tools.ide.cli.Ideasy`. Since running the main-method without any arguments is not really useful, it is necessary to create a run configuration +in Intellij for this module/method. + +The easiest way to create such a run configuration is clicking on the "run/play" button to the left of the main-method definition and then click on "Modify run configuration": + +image::../images/run_ide_locally_guide/run_button_main_method.png[] + +image::../images/run_ide_locally_guide/run_button_menu.png[] + +In the window that is then opened, some configurations have to be made (if not set automatically already): + +* Set the used SDK to the SDK of the project +* Set module to `ide-cli` +* Set Main class to `com.devonfw.tools.ide.cli.Ideasy` +* In Program arguments, add the cli arguments you want to pass to IDEasy (in the example a call to open vscode with the force-option) +* Set Working directory to the IDEasy project folder + +With this, you should have a working run configuration which starts IDEasy from your local branch with the provided arguments. +When you want to test other functionality of IDEasy, change the Program arguments in the run configuration accordingly. + +This shows an example run configuration for IDEasy: + +image::../images/run_ide_locally_guide/run_config_example.png[] + +=== Debug IDEasy in Intellij + +With the just created run configuration, we can also now use the debugger in Intellij to debug IDEasy using breakpoints. + +Just set breakpoints anywhere in the code and then use the "Debug" button with the run configuration. + diff --git a/documentation/contributing/setup.adoc b/documentation/contributing/setup.adoc index 853acc1247..31bab1813e 100644 --- a/documentation/contributing/setup.adoc +++ b/documentation/contributing/setup.adoc @@ -16,10 +16,11 @@ Send your GitHub login name/ID via Teams chat to https://github.com/hohwille[hoh + NOTE: Make sure your Git configuration matches your GitHub account: + -``` +[source] +---- git config user.name "«my_github_name»" git config user.email "«my_github_user_email»" -``` +---- == Installation of IDEasy @@ -31,9 +32,10 @@ For detailed, step‑by‑step installation instructions, including platform‑s . After the IDEasy installation, run the following command in the terminal to create a project: + -``` +[source] +---- ide create IDEasy - -``` +---- + Wait until this process has finished (this will take several minutes). This will create an `IDEasy` folder inside your `projects` directory, for example: @@ -46,37 +48,44 @@ NOTE: Steps for forking or cloning repositories, creating branches, and using Gi . Start a bash terminal (on Windows open `Git Bash` from the Start Menu) and run the following command: + -``` +[source] +---- icd -p IDEasy -w -``` +---- . Clone your fork in there: + -``` +[source] +---- git clone https://github.com/«my-github-login»/IDEasy.git -``` +---- . Configure your Git environment and connect your fork to the official IDEasy repository (upstream): + -``` +[source] +---- git remote add upstream https://github.com/devonfw/ideasy.git git fetch upstream -``` +---- . Build the project and download all dependencies: + -``` +[source] +---- ide mvn clean install -``` +---- . Now you can open the project in your preferred IDE using the `ide` command. + For IntelliJ: + -``` +[source] +---- ide intellij -``` +---- . If your IDE does not automatically detect the Maven project structure, you must add it manually. + In IntelliJ, navigate to the IDEasy folder inside your main workspace directory, locate the `pom.xml` file, right‑click it, and select **Add as Maven Project**. + TIP: If the Maven button is hidden or not visible, press `Alt+7` to open the **Structure** window below the project explorer. + Scroll down in the explorer to make the `pom.xml` file appear higher, enabling the option to be clicked. + +. To run IDEasy from your local project with your local changes, follow the instructions in link:run-ideasy-locally.adoc[Run IDEasy locally]. + Optional, for Windows user: + If you are developing on Windows, we strongly recommend to follow the guide link:testing-linux-on-windows.adoc[Testing IDEasy Linux on Windows]. @@ -108,11 +117,12 @@ Open the class `Ideasy` that is our main entry point of the CLI of IDEasy having Run it from your IDE, edit the run configuration and specify some arguments. Compare running the following CLI commands in your terminal as well as in your IDE: -``` +[source] +---- ide help ide -v ide status -``` +---- Also try to set some breakpoint and run it from your IDE in debug mode. diff --git a/documentation/images/run_ide_locally_guide/run_button_main_method.png b/documentation/images/run_ide_locally_guide/run_button_main_method.png new file mode 100644 index 0000000000000000000000000000000000000000..a15d58dce481f02d9bb9bce3700a3710d06d1421 GIT binary patch literal 4298 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 Rzds7V1AP;{N*#yi{{>fCNoN26 literal 0 HcmV?d00001 diff --git a/documentation/images/run_ide_locally_guide/run_button_menu.png b/documentation/images/run_ide_locally_guide/run_button_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..1d11fe7a22187e95c2ee0a74fadf7195eef04390 GIT binary patch literal 8152 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 literal 0 HcmV?d00001 diff --git a/documentation/images/run_ide_locally_guide/run_config_example.png b/documentation/images/run_ide_locally_guide/run_config_example.png new file mode 100644 index 0000000000000000000000000000000000000000..c9eaa4c5d4b8d062c0c70e08174f7c895f24c849 GIT binary patch literal 46714 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 Date: Fri, 15 May 2026 11:25:24 +0200 Subject: [PATCH 2/7] #1918: Add instructions for VSCode and on how to build and run a local .jar --- .../contributing/run-ideasy-locally.adoc | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc index 12e8422ff0..2a97239fef 100644 --- a/documentation/contributing/run-ideasy-locally.adoc +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -1,7 +1,10 @@ = Run IDEasy locally +:toc: macro In order to test changes you did locally in your feature branch, there is a need for running IDEasy locally from the branch with the local changes applied. -To achieve this, there are multiple options. The first would be to run IDEasy from inside Intellij, which also enables debugging with breakpoints and many more features. +To achieve this, there are multiple options. These include running IDEasy from inside an IDE such as IntelliJ or Visual Studio Code, which also enables debugging with breakpoints and many more features. + +toc::[] == Run IDEasy locally from inside Intellij @@ -36,3 +39,82 @@ With the just created run configuration, we can also now use the debugger in Int Just set breakpoints anywhere in the code and then use the "Debug" button with the run configuration. +== Run IDEasy locally from inside Visual Studio Code + +Running IDEasy from inside Visual Studio Code works similarly to IntelliJ and also supports debugging with breakpoints. +It requires the https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack[Extension Pack for Java] to be installed in VS Code. + +To create a launch configuration, create or open the file `.vscode/launch.json` in the root of the IDEasy project and add the following configuration: + +[source,json] +---- +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "IDEasy", + "request": "launch", + "mainClass": "com.devonfw.tools.ide.cli.Ideasy", + "projectName": "ide-cli", + "args": "install mvn", + "cwd": "${workspaceFolder}" + } + ] +} +---- + +The relevant settings are: + +* `mainClass`: must be set to `com.devonfw.tools.ide.cli.Ideasy` +* `projectName`: must be set to `ide-cli` +* `args`: the CLI arguments to pass to IDEasy (in the example, a call to install Maven) +* `cwd`: the working directory, set to the IDEasy project root + +With this configuration saved, open the *Run and Debug* panel (kbd:[Ctrl+Shift+D]), select *IDEasy* from the dropdown, and click the run button. +When you want to test other functionality of IDEasy, change the `args` value in `launch.json` accordingly. + +=== Debug IDEasy in Visual Studio Code + +With the launch configuration in place, debugging works out of the box. +Set breakpoints anywhere in the code and start the configuration using the *Debug* button in the *Run and Debug* panel. + +== Run IDEasy locally from the command line using a JAR + +As an alternative to running IDEasy from inside an IDE, it is also possible to build a runnable JAR and launch it directly from the command line. +This approach is useful when you want to test your local changes without opening an IDE, or when running IDEasy in a scripted environment. + +All commands below are executed from inside the `cli` subdirectory of the project. + +=== Step 1: Build the JAR + +Run a full Maven build to compile the project and produce the JAR: + + mvn clean install + +The resulting JAR is placed in `cli/target/` and named `ide-cli-.jar`, where `` matches the value defined in `.mvn/maven.config`. + +=== Step 2: Copy runtime dependencies + +The JAR does not bundle its dependencies. Copy them to `target/lib/` so the JAR manifest can resolve them at runtime: + + mvn dependency:copy-dependencies -DoutputDirectory=target/lib -DincludeScope=runtime + +=== Step 3: Run IDEasy + +Launch IDEasy with the desired CLI arguments. Replace `` with the actual revision string (e.g. `2026.05.001-SNAPSHOT`): + + java -jar target/ide-cli-.jar + +For example, to install a tool: + + java -jar target/ide-cli-2026.05.001-SNAPSHOT.jar install mvn + +When you want to test other functionality of IDEasy, change the CLI arguments accordingly. + +== Build IDEasy as a GraalVM native binary + +IDEasy can also be compiled to a native binary using GraalVM's native image feature. +This results in a self-contained executable with fast startup time and no JVM dependency, which is the same build used for official IDEasy releases. + +For step-by-step instructions on how to set up GraalVM and build the native image locally, see the xref:graalvm-build-guide.adoc[GraalVM Build Guide]. From aa697e87e87809cb926e0243aff698c654fce31d Mon Sep 17 00:00:00 2001 From: Robin Wenzel Date: Fri, 15 May 2026 16:52:03 +0200 Subject: [PATCH 3/7] Apply suggestions from code review Co-authored-by: Alexander Reinicke <167530118+areinicke@users.noreply.github.com> --- documentation/contributing/run-ideasy-locally.adoc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc index 2a97239fef..d838c17b35 100644 --- a/documentation/contributing/run-ideasy-locally.adoc +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -44,7 +44,9 @@ Just set breakpoints anywhere in the code and then use the "Debug" button with t Running IDEasy from inside Visual Studio Code works similarly to IntelliJ and also supports debugging with breakpoints. It requires the https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack[Extension Pack for Java] to be installed in VS Code. -To create a launch configuration, create or open the file `.vscode/launch.json` in the root of the IDEasy project and add the following configuration: +To create a launch configuration, open the *Run and Debug* panel (kbd:[Ctrl+Shift+D]) and select *create a launch.json file*. This will automatically create a ready-to-go launch configuration that you can modify with relevant launch arguments. + +You can also manually create a launch configuration by creating and opening the file `.vscode/launch.json` in the root of the IDEasy project and adding the following configuration: [source,json] ---- @@ -53,11 +55,11 @@ To create a launch configuration, create or open the file `.vscode/launch.json` "configurations": [ { "type": "java", - "name": "IDEasy", + "name": "Ideasy", "request": "launch", "mainClass": "com.devonfw.tools.ide.cli.Ideasy", "projectName": "ide-cli", - "args": "install mvn", + "args": ["install", "mvn"], "cwd": "${workspaceFolder}" } ] @@ -68,7 +70,7 @@ The relevant settings are: * `mainClass`: must be set to `com.devonfw.tools.ide.cli.Ideasy` * `projectName`: must be set to `ide-cli` -* `args`: the CLI arguments to pass to IDEasy (in the example, a call to install Maven) +* `args`: the CLI arguments to pass to IDEasy (in the example, a call to install Maven). Multiple arguments must be passed as a list of Strings. * `cwd`: the working directory, set to the IDEasy project root With this configuration saved, open the *Run and Debug* panel (kbd:[Ctrl+Shift+D]), select *IDEasy* from the dropdown, and click the run button. From 726d31307d118d1de45a359dc85dee1c1c6a886c Mon Sep 17 00:00:00 2001 From: Robin Wenzel Date: Thu, 21 May 2026 12:18:10 +0200 Subject: [PATCH 4/7] Update documentation/contributing/run-ideasy-locally.adoc --- documentation/contributing/run-ideasy-locally.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc index d838c17b35..2919232835 100644 --- a/documentation/contributing/run-ideasy-locally.adoc +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -20,9 +20,9 @@ image::../images/run_ide_locally_guide/run_button_menu.png[] In the window that is then opened, some configurations have to be made (if not set automatically already): -* Set the used SDK to the SDK of the project -* Set module to `ide-cli` -* Set Main class to `com.devonfw.tools.ide.cli.Ideasy` +* Verify that the used SDK is the SDK of the project +* Verify that module is set to `ide-cli` +* Verify that Main class is set to `com.devonfw.tools.ide.cli.Ideasy` * In Program arguments, add the cli arguments you want to pass to IDEasy (in the example a call to open vscode with the force-option) * Set Working directory to the IDEasy project folder From b8587fad1c2f1804038573246a48b9625c7c0cd4 Mon Sep 17 00:00:00 2001 From: Robin Wenzel Date: Thu, 21 May 2026 12:20:05 +0200 Subject: [PATCH 5/7] Update documentation/contributing/run-ideasy-locally.adoc --- documentation/contributing/run-ideasy-locally.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc index 2919232835..7fc06d038f 100644 --- a/documentation/contributing/run-ideasy-locally.adoc +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -42,7 +42,7 @@ Just set breakpoints anywhere in the code and then use the "Debug" button with t == Run IDEasy locally from inside Visual Studio Code Running IDEasy from inside Visual Studio Code works similarly to IntelliJ and also supports debugging with breakpoints. -It requires the https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack[Extension Pack for Java] to be installed in VS Code. +It requires the https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack[Extension Pack for Java] to be installed in VS Code (This is pre-installed by IDEasy, so if you use Vs-Code from IDEasy, there is nothing to do here!). To create a launch configuration, open the *Run and Debug* panel (kbd:[Ctrl+Shift+D]) and select *create a launch.json file*. This will automatically create a ready-to-go launch configuration that you can modify with relevant launch arguments. From accba194af56633722a1ce5860ed291077c037a8 Mon Sep 17 00:00:00 2001 From: Robin Wenzel Date: Thu, 21 May 2026 12:22:44 +0200 Subject: [PATCH 6/7] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jörg Hohwiller --- documentation/contributing/run-ideasy-locally.adoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc index 7fc06d038f..759e1417a9 100644 --- a/documentation/contributing/run-ideasy-locally.adoc +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -44,7 +44,8 @@ Just set breakpoints anywhere in the code and then use the "Debug" button with t Running IDEasy from inside Visual Studio Code works similarly to IntelliJ and also supports debugging with breakpoints. It requires the https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack[Extension Pack for Java] to be installed in VS Code (This is pre-installed by IDEasy, so if you use Vs-Code from IDEasy, there is nothing to do here!). -To create a launch configuration, open the *Run and Debug* panel (kbd:[Ctrl+Shift+D]) and select *create a launch.json file*. This will automatically create a ready-to-go launch configuration that you can modify with relevant launch arguments. +To create a launch configuration, open the *Run and Debug* panel (press `[Ctrl][Shift][D]`) and select *create a launch.json file*. +This will automatically create a ready-to-go launch configuration that you can modify with relevant launch arguments. You can also manually create a launch configuration by creating and opening the file `.vscode/launch.json` in the root of the IDEasy project and adding the following configuration: @@ -73,7 +74,7 @@ The relevant settings are: * `args`: the CLI arguments to pass to IDEasy (in the example, a call to install Maven). Multiple arguments must be passed as a list of Strings. * `cwd`: the working directory, set to the IDEasy project root -With this configuration saved, open the *Run and Debug* panel (kbd:[Ctrl+Shift+D]), select *IDEasy* from the dropdown, and click the run button. +With this configuration saved, open the *Run and Debug* panel (press `[Ctrl][Shift][D]`), select `IDEasy` from the dropdown, and click the run button. When you want to test other functionality of IDEasy, change the `args` value in `launch.json` accordingly. === Debug IDEasy in Visual Studio Code From a44238d85dfc481c48e57c3a255e5a853078cb6e Mon Sep 17 00:00:00 2001 From: satorus Date: Thu, 21 May 2026 12:32:58 +0200 Subject: [PATCH 7/7] #1918: PR comments Revert back to previous source listing style Added easier run without IDE example using mvn exec:exec --- .../contributing/run-ideasy-locally.adoc | 33 +++++---------- documentation/contributing/setup.adoc | 42 +++++++------------ 2 files changed, 26 insertions(+), 49 deletions(-) diff --git a/documentation/contributing/run-ideasy-locally.adoc b/documentation/contributing/run-ideasy-locally.adoc index 759e1417a9..fbce075542 100644 --- a/documentation/contributing/run-ideasy-locally.adoc +++ b/documentation/contributing/run-ideasy-locally.adoc @@ -49,8 +49,7 @@ This will automatically create a ready-to-go launch configuration that you can m You can also manually create a launch configuration by creating and opening the file `.vscode/launch.json` in the root of the IDEasy project and adding the following configuration: -[source,json] ----- +``` { "version": "0.2.0", "configurations": [ @@ -65,7 +64,7 @@ You can also manually create a launch configuration by creating and opening the } ] } ----- +``` The relevant settings are: @@ -84,34 +83,22 @@ Set breakpoints anywhere in the code and start the configuration using the *Debu == Run IDEasy locally from the command line using a JAR -As an alternative to running IDEasy from inside an IDE, it is also possible to build a runnable JAR and launch it directly from the command line. +As an alternative to running IDEasy from inside an IDE, it is also possible to launch it directly from the command line. This approach is useful when you want to test your local changes without opening an IDE, or when running IDEasy in a scripted environment. All commands below are executed from inside the `cli` subdirectory of the project. -=== Step 1: Build the JAR +Launch IDEasy with the desired CLI arguments: -Run a full Maven build to compile the project and produce the JAR: - - mvn clean install - -The resulting JAR is placed in `cli/target/` and named `ide-cli-.jar`, where `` matches the value defined in `.mvn/maven.config`. - -=== Step 2: Copy runtime dependencies - -The JAR does not bundle its dependencies. Copy them to `target/lib/` so the JAR manifest can resolve them at runtime: - - mvn dependency:copy-dependencies -DoutputDirectory=target/lib -DincludeScope=runtime - -=== Step 3: Run IDEasy - -Launch IDEasy with the desired CLI arguments. Replace `` with the actual revision string (e.g. `2026.05.001-SNAPSHOT`): - - java -jar target/ide-cli-.jar +``` +mvn exec:exec -Dexec.executable=java -Dexec.args="-cp %classpath com.devonfw.tools.ide.cli.Ideasy help" +``` For example, to install a tool: - java -jar target/ide-cli-2026.05.001-SNAPSHOT.jar install mvn +``` +mvn exec:exec -Dexec.executable=java -Dexec.args="-cp %classpath com.devonfw.tools.ide.cli.Ideasy install mvn" +``` When you want to test other functionality of IDEasy, change the CLI arguments accordingly. diff --git a/documentation/contributing/setup.adoc b/documentation/contributing/setup.adoc index 31bab1813e..853acc1247 100644 --- a/documentation/contributing/setup.adoc +++ b/documentation/contributing/setup.adoc @@ -16,11 +16,10 @@ Send your GitHub login name/ID via Teams chat to https://github.com/hohwille[hoh + NOTE: Make sure your Git configuration matches your GitHub account: + -[source] ----- +``` git config user.name "«my_github_name»" git config user.email "«my_github_user_email»" ----- +``` == Installation of IDEasy @@ -32,10 +31,9 @@ For detailed, step‑by‑step installation instructions, including platform‑s . After the IDEasy installation, run the following command in the terminal to create a project: + -[source] ----- +``` ide create IDEasy - ----- +``` + Wait until this process has finished (this will take several minutes). This will create an `IDEasy` folder inside your `projects` directory, for example: @@ -48,44 +46,37 @@ NOTE: Steps for forking or cloning repositories, creating branches, and using Gi . Start a bash terminal (on Windows open `Git Bash` from the Start Menu) and run the following command: + -[source] ----- +``` icd -p IDEasy -w ----- +``` . Clone your fork in there: + -[source] ----- +``` git clone https://github.com/«my-github-login»/IDEasy.git ----- +``` . Configure your Git environment and connect your fork to the official IDEasy repository (upstream): + -[source] ----- +``` git remote add upstream https://github.com/devonfw/ideasy.git git fetch upstream ----- +``` . Build the project and download all dependencies: + -[source] ----- +``` ide mvn clean install ----- +``` . Now you can open the project in your preferred IDE using the `ide` command. + For IntelliJ: + -[source] ----- +``` ide intellij ----- +``` . If your IDE does not automatically detect the Maven project structure, you must add it manually. + In IntelliJ, navigate to the IDEasy folder inside your main workspace directory, locate the `pom.xml` file, right‑click it, and select **Add as Maven Project**. + TIP: If the Maven button is hidden or not visible, press `Alt+7` to open the **Structure** window below the project explorer. + Scroll down in the explorer to make the `pom.xml` file appear higher, enabling the option to be clicked. + -. To run IDEasy from your local project with your local changes, follow the instructions in link:run-ideasy-locally.adoc[Run IDEasy locally]. - Optional, for Windows user: + If you are developing on Windows, we strongly recommend to follow the guide link:testing-linux-on-windows.adoc[Testing IDEasy Linux on Windows]. @@ -117,12 +108,11 @@ Open the class `Ideasy` that is our main entry point of the CLI of IDEasy having Run it from your IDE, edit the run configuration and specify some arguments. Compare running the following CLI commands in your terminal as well as in your IDE: -[source] ----- +``` ide help ide -v ide status ----- +``` Also try to set some breakpoint and run it from your IDE in debug mode.