Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -20,6 +20,7 @@ Release with new features and bugfixes:
* https://github.com/devonfw/IDEasy/issues/1853[#1853]: Add ARM releases for VSCode on Mac
* https://github.com/devonfw/IDEasy/issues/797[#797]: Use system unzip on macOS to preserve symlinks in ZIP extraction
* https://github.com/devonfw/IDEasy/issues/1723[#1723]: Add commandlet for GitHub Copilot CLI
* https://github.com/devonfw/IDEasy/issues/1880[#1880]: Reinstall all plugins for IDE in force mode

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,32 @@ protected void postInstall(ToolInstallRequest request) {
Path pluginsInstallationPath = getPluginsInstallationPath();
FileAccess fileAccess = this.context.getFileAccess();
if (!request.isAlreadyInstalled()) {
fileAccess.delete(pluginsInstallationPath);
deleteAllPlugins(pluginsInstallationPath);
} else if (this.context.isForceMode()) {
// Prompt user if they want to reset all plugins
boolean resetPlugins = this.context.question(
"You are launching " + getName() + " in force mode. Do you want to reset all plugins for " + getName() + "? "
+ "This will uninstall all currently installed plugins and reinstall them as configured in your IDEasy project settings.");
if (resetPlugins) {
deleteAllPlugins(pluginsInstallationPath);
}
}
fileAccess.mkdirs(pluginsInstallationPath);
installPlugins(request.getProcessContext());
}

private void deleteAllPlugins(Path pluginsInstallationPath) {

FileAccess fileAccess = this.context.getFileAccess();
fileAccess.delete(pluginsInstallationPath);
List<Path> markerFiles = fileAccess.listChildren(this.context.getIdeHome().resolve(IdeContext.FOLDER_DOT_IDE), Files::isRegularFile);
for (Path path : markerFiles) {
if (path.getFileName().toString().startsWith("plugin." + getName())) {
LOG.debug("Plugin marker file {} got deleted.", path);
fileAccess.delete(path);
}
}
}
fileAccess.mkdirs(pluginsInstallationPath);
installPlugins(request.getProcessContext());

}

private void installPlugins(ProcessContext pc) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ void testEclipse(String os) throws IOException {
SystemInfo systemInfo = SystemInfoMock.of(os);
IdeTestContext context = newContext(PROJECT_ECLIPSE, "eclipseproject");
context.setSystemInfo(systemInfo);
context.getStartContext().setForceMode(true); // #663
Eclipse eclipse = context.getCommandletManager().getCommandlet(Eclipse.class);

// act
Expand Down
9 changes: 9 additions & 0 deletions documentation/plugin.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,12 @@ For `VisualStudio Code`, this is the extension ID you can directly get from the
|`active`|`true`|(optional) `true` to tell IDEasy that this plugin shall be installed automatically for everybody in your team. Default is `false`. If not auto-installed, it can still be installed via `ide install-plugin «ide» «plugin»`.
|`tags`|e.g. `java,spring,ai`|(optional) Tags to classify the plugin. Will be used by the GUI of IDEasy for selection by tag.
|===


== Resetting installed plugins

When first installing an IDE using `ide install «ide»`, IDEasy will automatically install all plugins that are configured in the project settings.
This configuration is intended to serve as a baseline for the entire team.
However, after the initial setup, you can freely change the plugin configuration for your IDE as you see fit.

To revert to the initial plugin configuration, you can run `ide -f «ide»`, which will give you the option to uninstall all installed plugins and reinstall them as configured in your project settings.
Loading