Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
7af9fc5
#765: Fix typos in DoD asciidoc
Oct 2, 2024
aeae1dd
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Oct 17, 2024
e520d16
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Oct 25, 2024
29403d3
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Oct 25, 2024
5bff5eb
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Oct 28, 2024
890c107
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Oct 29, 2024
c55af62
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Oct 31, 2024
5224bf9
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Nov 7, 2024
d925977
Merge branch 'main' of https://github.com/KianRolf/IDEasy
KianRolf Nov 8, 2024
8921a0c
Testprovider
KianRolf Nov 11, 2024
6a139b3
extension
KianRolf Nov 11, 2024
fcf4a64
draft pr
KianRolf Nov 13, 2024
e2b1c2b
fix
KianRolf Nov 13, 2024
648c65a
Merge branch 'main' into enhance/404-logging-concept
KianRolf Nov 13, 2024
22b59be
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Nov 14, 2024
5e1ce87
Merge branch 'main' into enhance/404-logging-concept
KianRolf Nov 14, 2024
a9ffba2
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Nov 18, 2024
c15e0d1
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Nov 19, 2024
dc5de78
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Nov 20, 2024
0ca3f64
Merge branch 'main' into enhance/404-logging-concept
hohwille Nov 28, 2024
26344ad
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 21, 2025
76d3527
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 21, 2025
fc74f71
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 22, 2025
2fb8f0d
#404: implemented requested changes
jan-vcapgemini Jan 22, 2025
3a0616f
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 23, 2025
aaa9fd3
#404: implemented IdeLoggerAdapter
jan-vcapgemini Jan 27, 2025
c7b170a
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 27, 2025
ef08b4e
#404: fixed WireMock tests
jan-vcapgemini Jan 27, 2025
5cd1ab3
#404: fixed WireMock tests
jan-vcapgemini Jan 28, 2025
e8a30a8
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 28, 2025
b4669bb
#404: fixed WireMock tests
jan-vcapgemini Jan 28, 2025
8769dcc
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jan 29, 2025
98a0f2e
#404: refactored urls into url-updater
jan-vcapgemini Feb 4, 2025
19273ac
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Feb 4, 2025
793417a
#404: fixed github actions workflow
jan-vcapgemini Feb 5, 2025
72f2000
#404: fixed test package names
jan-vcapgemini Feb 5, 2025
e70b96e
#404: fixed assertThat import
jan-vcapgemini Feb 5, 2025
eca4217
#404: removed FQN
jan-vcapgemini Feb 5, 2025
cc145f3
#404: fixed assertThat import
jan-vcapgemini Feb 5, 2025
1beb57d
#404: implemented requested changes
jan-vcapgemini Feb 7, 2025
2597874
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Mar 11, 2025
a8600d6
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Mar 31, 2025
b87d21a
#404: removed outdated imports
jan-vcapgemini Mar 31, 2025
c1c545b
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Mar 31, 2025
e21c0a2
#404: removed jackson-core dependency
jan-vcapgemini Apr 1, 2025
708668d
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Apr 7, 2025
a8b1585
Merge branch 'main' into enhance/404-logging-concept
hohwille Apr 28, 2025
1b924df
#404 implemented requested changes
jan-vcapgemini Apr 28, 2025
3148625
#404 implemented requested changes
jan-vcapgemini Apr 28, 2025
59a0776
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Apr 29, 2025
5ddbf45
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini May 5, 2025
06ae1ab
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini May 12, 2025
cbe54f9
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jun 10, 2025
48ade8b
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jul 7, 2025
32e2ac8
#404: implemented requested changes
jan-vcapgemini Jul 7, 2025
540717d
#404: fixed gui
jan-vcapgemini Jul 7, 2025
005025d
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Jul 21, 2025
8ec3d19
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Aug 11, 2025
8237ccb
#404 fixed javadocs in UrlUpdaterTest
jan-vcapgemini Aug 11, 2025
cd7491c
Merge branch 'main' into enhance/404-logging-concept
jan-vcapgemini Oct 13, 2025
577c1cb
#404: Removed old mavenRepository
jan-vcapgemini Oct 13, 2025
64a8ece
Merge branch 'main' into enhance/404-logging-concept
hohwille Feb 19, 2026
df7334c
#404: support SLF4J
hohwille Feb 19, 2026
97cf467
#404: bugfix
hohwille Feb 19, 2026
d63d924
#404: implement logfile and rework logging
hohwille Feb 20, 2026
5b9cea5
#404: bugfix
hohwille Feb 20, 2026
04e4bda
#404: use SLF4J, fixes
hohwille Feb 20, 2026
eff4c82
#404: fixed JUL issue with ProcessBuilder
hohwille Feb 21, 2026
542ee46
#404: #1713: completely removed IdeLogger and IdeSubLogger, do all lo…
hohwille Feb 22, 2026
52addda
#1713: added to CHANGELOG
hohwille Feb 22, 2026
043a5f7
#1713: added to documentation
hohwille Feb 22, 2026
7a4a631
#404: fix tests on Linux
hohwille Feb 22, 2026
e55a919
#404: workaround for JUL bug
hohwille Feb 22, 2026
060f701
#404: fixed error
hohwille Feb 22, 2026
8263a11
#404: fixed error
hohwille Feb 22, 2026
98f0142
#404: polishing (method names, JavaDoc, dont write logfile for versio…
hohwille Feb 22, 2026
caa9808
#404: robustness fix
hohwille Feb 23, 2026
c39439f
#404: convenience methods for simpler usage
hohwille Feb 23, 2026
0e2400b
#404: apply of simpler usage
hohwille Feb 23, 2026
535e3bc
#1303: bugfix for privacy mode
hohwille Feb 23, 2026
a08741f
#404: fixed stupid bug
hohwille Feb 23, 2026
87fb9f4
#1713: improve logfile naming
hohwille Feb 23, 2026
e9424cf
#1303: bugfix for privacy mode
hohwille Feb 23, 2026
f1f7e1e
#1713: improve configureJavaUtilLogging
hohwille Feb 23, 2026
7d88da9
#1713: smart way to always write trace log
hohwille Feb 23, 2026
5be0485
#1713: default to debug logging during tests, remove context mock
hohwille Feb 23, 2026
b4368b8
#1713: fixed graalvm issue
hohwille Feb 24, 2026
5655b65
#1713: updated doc to be in sync with code again
hohwille Feb 24, 2026
d933236
Merge branch 'main' into feature/404-1713-advanced-logging
hohwille Mar 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDE

Release with new features and bugfixes:

* https://github.com/devonfw/IDEasy/issues/1713[#1713]: Advanced logging and writing logfiles

The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/41?closed=1[milestone 2026.03.001].

Expand Down
5 changes: 0 additions & 5 deletions cli/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,6 @@
<artifactId>slf4j-api</artifactId>
<!--optional>true</optional-->
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<!--optional>true</optional-->
</dependency>
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>nativeimage</artifactId>
Expand Down
29 changes: 15 additions & 14 deletions cli/src/main/java/com/devonfw/tools/ide/cli/Ideasy.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.tools.ide.commandlet.ContextCommandlet;
import com.devonfw.tools.ide.context.AbstractIdeContext;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.context.IdeContextConsole;
import com.devonfw.tools.ide.context.IdeStartContextImpl;
import com.devonfw.tools.ide.log.IdeLogLevel;
import com.devonfw.tools.ide.log.JulLogLevel;
import com.devonfw.tools.ide.property.FlagProperty;
import com.devonfw.tools.ide.property.Property;

Expand All @@ -17,6 +20,8 @@
*/
public final class Ideasy {

private static final Logger LOG = LoggerFactory.getLogger(Ideasy.class);

private AbstractIdeContext context;

/**
Expand All @@ -37,15 +42,6 @@ public Ideasy() {
this.context = context;
}

private IdeContext context() {

if (this.context == null) {
// fallback in case of exception before initialization
return new IdeContextConsole(IdeLogLevel.INFO, null, false);
}
return this.context;
}

/**
* Non-static variant of {@link #main(String...) main method} without invoking {@link System#exit(int)} so it can be tested.
*
Expand All @@ -61,7 +57,7 @@ public int run(String... args) {
exitStatus = error.getExitCode();
String errorMessage = error.getMessage();
if ((errorMessage != null) && !errorMessage.isBlank()) {
context().error(errorMessage);
LOG.error(errorMessage);
}
} catch (Throwable error) {
exitStatus = 255;
Expand All @@ -77,7 +73,7 @@ public int run(String... args) {
+ "If the error is not on your end (network connectivity, lack of permissions, etc.) please file a bug:\n" //
+ "https://github.com/devonfw/IDEasy/issues/new?template=bug_report.yml&title="
+ URLEncoder.encode(title, StandardCharsets.UTF_8);
context().error(error, message);
LOG.error(message, error);
}
return exitStatus;
}
Expand All @@ -97,7 +93,11 @@ public int runOrThrow(String... args) {

private void initContext(CliArguments arguments) {

ContextCommandlet contextCommandlet = new ContextCommandlet();
IdeStartContextImpl startContext = null;
if (this.context != null) {
startContext = this.context.getStartContext();
}
ContextCommandlet contextCommandlet = new ContextCommandlet(startContext);
while (arguments.hasNext()) {
CliArgument current = arguments.next();
String key = current.getKey();
Expand All @@ -118,7 +118,7 @@ private void initContext(CliArguments arguments) {
}
contextCommandlet.run();
if (this.context == null) {
IdeStartContextImpl startContext = contextCommandlet.getStartContext();
startContext = contextCommandlet.getStartContext();
this.context = new IdeContextConsole(startContext);
}
}
Expand All @@ -130,6 +130,7 @@ private void initContext(CliArguments arguments) {
*/
public static void main(String... args) {

JulLogLevel.init();
int exitStatus = new Ideasy().run(args);
System.exit(exitStatus);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import java.util.Set;
import java.util.stream.Stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.tools.ide.cli.CliException;
import com.devonfw.tools.ide.context.AbstractIdeContext;
import com.devonfw.tools.ide.context.IdeContext;
Expand Down Expand Up @@ -38,6 +41,8 @@
*/
public abstract class AbstractUpdateCommandlet extends Commandlet {

private static final Logger LOG = LoggerFactory.getLogger(AbstractUpdateCommandlet.class);

private static final String MESSAGE_CODE_REPO_URL = """
No code repository was given after '--code'.
Further details can be found here: https://github.com/devonfw/IDEasy/blob/main/documentation/settings.adoc
Expand Down Expand Up @@ -85,7 +90,7 @@ public AbstractUpdateCommandlet(IdeContext context) {
}

@Override
public void run() {
protected void doRun() {

IdeStartContextImpl startContext = ((AbstractIdeContext) this.context).getStartContext();
startContext.setForcePull(forcePull.isTrue());
Expand Down Expand Up @@ -116,7 +121,7 @@ private void updateConf() {
if (Files.exists(legacyTemplatesFolder)) {
templatesFolder = legacyTemplatesFolder;
} else {
this.context.warning("Templates folder is missing in settings repository.");
LOG.warn("Templates folder is missing in settings repository.");
return;
}
}
Expand All @@ -141,10 +146,10 @@ private void setupConf(Path template, Path conf) {
setupConf(child, confPath);
} else if (Files.isRegularFile(child)) {
if (Files.isRegularFile(confPath)) {
this.context.debug("Configuration {} already exists - skipping to copy from {}", confPath, child);
LOG.debug("Configuration {} already exists - skipping to copy from {}", confPath, child);
} else {
if (!basename.equals("settings.xml")) {
this.context.info("Copying template {} to {}.", child, conf);
LOG.info("Copying template {} to {}.", child, conf);
this.context.getFileAccess().copy(child, conf);
}
}
Expand Down Expand Up @@ -175,7 +180,7 @@ private void updateSettingsInStep() {
gitContext.pull(settingsPath);
this.context.getGitContext().saveCurrentCommitId(settingsPath, this.context.getSettingsCommitIdPath());
} else {
this.context.info("Skipping git pull in settings due to code repository. Use --force-pull to enforce pulling.");
LOG.info("Skipping git pull in settings due to code repository. Use --force-pull to enforce pulling.");
}
} else {
GitUrl gitUrl = getOrAskSettingsUrl();
Expand All @@ -193,11 +198,11 @@ private GitUrl getOrAskSettingsUrl() {
if (isCodeRepository()) {
userPromt = "Code repository URL:";
defaultUrl = null;
this.context.info(MESSAGE_CODE_REPO_URL);
LOG.info(MESSAGE_CODE_REPO_URL);
} else {
userPromt = "Settings URL [" + IdeContext.DEFAULT_SETTINGS_REPO_URL + "]:";
defaultUrl = IdeContext.DEFAULT_SETTINGS_REPO_URL;
this.context.info(MESSAGE_SETTINGS_REPO_URL, this.context.getSettingsPath());
LOG.info(MESSAGE_SETTINGS_REPO_URL, this.context.getSettingsPath());
}
GitUrl gitUrl = null;
if (repository != null) {
Expand All @@ -208,7 +213,7 @@ private GitUrl getOrAskSettingsUrl() {
repository = handleDefaultRepository(repository);
gitUrl = GitUrl.of(repository);
if (!gitUrl.isValid()) {
this.context.warning("The input URL is not valid, please try again.");
LOG.warn("The input URL is not valid, please try again.");
}
}
return gitUrl;
Expand All @@ -217,10 +222,10 @@ private GitUrl getOrAskSettingsUrl() {
private String handleDefaultRepository(String repository) {
if ("-".equals(repository)) {
if (isCodeRepository()) {
this.context.warning("'-' is found after '--code'. This is invalid.");
LOG.warn("'-' is found after '--code'. This is invalid.");
repository = null;
} else {
this.context.info("'-' was found for settings repository, the default settings repository '{}' will be used.", IdeContext.DEFAULT_SETTINGS_REPO_URL);
LOG.info("'-' was found for settings repository, the default settings repository '{}' will be used.", IdeContext.DEFAULT_SETTINGS_REPO_URL);
repository = IdeContext.DEFAULT_SETTINGS_REPO_URL;
}
}
Expand Down Expand Up @@ -275,7 +280,7 @@ private void initializeRepository(GitUrl gitUrl) {
private void updateSoftware() {

if (this.skipTools.isTrue()) {
this.context.info("Skipping installation/update of tools as specified by the user.");
LOG.info("Skipping installation/update of tools as specified by the user.");
return;
}
Step step = this.context.newStep("Install or update software");
Expand Down Expand Up @@ -303,7 +308,7 @@ private void doUpdateSoftwareStep(Step step) {
ToolCommandlet toolCommandlet = commandletManager.getToolCommandlet(regularTool);
if (toolCommandlet == null) {
String displayName = (regularTool == null || regularTool.isBlank()) ? "<empty>" : "'" + regularTool + "'";
this.context.error("Cannot install or update tool '{}''. No matching commandlet found. Please check your IDE_TOOLS configuration.", displayName);
LOG.error("Cannot install or update tool '{}''. No matching commandlet found. Please check your IDE_TOOLS configuration.", displayName);
} else {
toolCommandlets.add(toolCommandlet);
}
Expand All @@ -324,7 +329,7 @@ private void doUpdateSoftwareStep(Step step) {
ExtraTools extraTools = ExtraToolsMapper.get().loadJsonFromFolder(this.context.getSettingsPath());
if (extraTools != null) {
List<String> toolNames = extraTools.getSortedToolNames();
this.context.info("Found extra installation of the following tools: {}", toolNames);
LOG.info("Found extra installation of the following tools: {}", toolNames);
for (String tool : toolNames) {
List<ExtraToolInstallation> installations = extraTools.getExtraInstallations(tool);
this.context.newStep("Install extra version(s) of " + tool).run(() -> installExtraToolInstallations(tool, installations));
Expand Down Expand Up @@ -358,9 +363,9 @@ private void updateRepositories() {

if (this.skipRepositories.isTrue()) {
if (this.forceRepositories.isTrue()) {
this.context.warning("Options to skip and force repositories are incompatible and should not be combined. Ignoring --force-repositories to proceed.");
LOG.warn("Options to skip and force repositories are incompatible and should not be combined. Ignoring --force-repositories to proceed.");
}
this.context.info("Skipping setup of repositories as specified by the user.");
LOG.info("Skipping setup of repositories as specified by the user.");
return;
}
RepositoryCommandlet repositoryCommandlet = this.context.getCommandletManager().getCommandlet(RepositoryCommandlet.class);
Expand All @@ -372,13 +377,13 @@ private void createStartScripts() {

List<String> ides = IdeVariables.CREATE_START_SCRIPTS.get(this.context);
if (ides == null) {
this.context.info("Variable CREATE_START_SCRIPTS is undefined - skipping start script creation.");
LOG.info("Variable CREATE_START_SCRIPTS is undefined - skipping start script creation.");
return;
}
for (String ide : ides) {
ToolCommandlet tool = this.context.getCommandletManager().getToolCommandlet(ide);
if (tool == null) {
this.context.error("Undefined IDE '{}' configured in variable CREATE_START_SCRIPTS.");
LOG.error("Undefined IDE '{}' configured in variable CREATE_START_SCRIPTS.", ide);
} else {
createStartScript(ide);
}
Expand All @@ -387,7 +392,7 @@ private void createStartScripts() {

private void createStartScript(String ide) {

this.context.info("Creating start scripts for {}", ide);
LOG.info("Creating start scripts for {}", ide);
Path workspaces = this.context.getIdeHome().resolve(IdeContext.FOLDER_WORKSPACES);
try (Stream<Path> childStream = Files.list(workspaces)) {
Iterator<Path> iterator = childStream.iterator();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import java.util.Objects;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.tools.ide.cli.CliException;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.log.IdeLogLevel;
import com.devonfw.tools.ide.log.IdeSubLogger;
import com.devonfw.tools.ide.property.FlagProperty;
import com.devonfw.tools.ide.property.ToolProperty;
import com.devonfw.tools.ide.tool.ToolCommandlet;
Expand All @@ -17,6 +19,8 @@
*/
public abstract class AbstractVersionOrEditionGetCommandlet extends Commandlet {

private static final Logger LOG = LoggerFactory.getLogger(AbstractVersionOrEditionGetCommandlet.class);

/** The tool to get the version of. */
public final ToolProperty tool;

Expand Down Expand Up @@ -68,10 +72,10 @@ public boolean isProcessableOutput() {
protected abstract Object getInstalledValue(ToolCommandlet commandlet);

@Override
public void run() {
protected void doRun() {

ToolCommandlet commandlet = this.tool.getValue();
IdeSubLogger logger = this.context.level(IdeLogLevel.PROCESSABLE);
IdeLogLevel level = IdeLogLevel.PROCESSABLE;
Object configuredValue = getConfiguredValue(commandlet);
Object installedValue = getInstalledValue(commandlet);
boolean getInstalledValue = this.installed.isTrue();
Expand All @@ -81,42 +85,43 @@ public void run() {
}
if (getInstalledValue == getConfiguredValue) {
if (getInstalledValue) { // both --configured and --installed
logToolInfo(logger, commandlet, configuredValue, installedValue);
} else if (this.context.debug().isEnabled()) {
logToolInfo(logger, commandlet, configuredValue, installedValue);
logToolInfo(commandlet, configuredValue, installedValue);
} else if (LOG.isDebugEnabled()) {
logToolInfo(commandlet, configuredValue, installedValue);
} else {
if (installedValue == null) {
logger.log(configuredValue.toString());
level.log(LOG, configuredValue.toString());
} else {
logger.log(installedValue.toString());
level.log(LOG, installedValue.toString());
}
}
} else {
if (getInstalledValue) {
if (installedValue == null) {
logToolInfo(logger, commandlet, configuredValue, null);
logToolInfo(commandlet, configuredValue, null);
} else {
logger.log(installedValue.toString());
level.log(LOG, installedValue.toString());
}
} else {
logger.log(configuredValue.toString());
level.log(LOG, configuredValue.toString());
}
}
}

private void logToolInfo(IdeSubLogger logger, ToolCommandlet commandlet, Object configuredValue, Object installedValue) {
private void logToolInfo(ToolCommandlet commandlet, Object configuredValue, Object installedValue) {

String property = getPropertyToGet();
String toolName = commandlet.getName();
IdeLogLevel level = IdeLogLevel.PROCESSABLE;
if (installedValue == null) {
logger.log("No installation of tool {} was found.", toolName);
level.log(LOG, "No installation of tool {} was found.", toolName);
} else {
logger.log("The installed {} for tool {} is {}", property, toolName, installedValue);
level.log(LOG, "The installed {} for tool {} is {}", property, toolName, installedValue);
}
logger.log("The configured {} for tool {} is {}", property, toolName, configuredValue);
level.log(LOG, "The configured {} for tool {} is {}", property, toolName, configuredValue);
if (!Objects.equals(configuredValue, installedValue)) {
logger.log("To install the configured {} call the following command:", property);
logger.log("ide install {}", toolName);
level.log(LOG, "To install the configured {} call the following command:", property);
level.log(LOG, "ide install {}", toolName);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public String getName() {
}

@Override
public void run() {
protected void doRun() {

Path buildPath = this.context.getCwd();

Expand Down
Loading