Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
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/1909[#1909]: add commandlet for Maven Daemon

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import java.util.Map;
import java.util.NoSuchElementException;

import com.devonfw.tools.ide.tool.inso.Inso;

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

Expand Down Expand Up @@ -37,6 +35,7 @@
import com.devonfw.tools.ide.tool.gradle.Gradle;
import com.devonfw.tools.ide.tool.gui.Gui;
import com.devonfw.tools.ide.tool.helm.Helm;
import com.devonfw.tools.ide.tool.inso.Inso;
import com.devonfw.tools.ide.tool.intellij.Intellij;
import com.devonfw.tools.ide.tool.jasypt.Jasypt;
import com.devonfw.tools.ide.tool.java.Java;
Expand All @@ -45,8 +44,9 @@
import com.devonfw.tools.ide.tool.kotlinc.KotlincNative;
import com.devonfw.tools.ide.tool.kubectl.KubeCtl;
import com.devonfw.tools.ide.tool.lazydocker.LazyDocker;
import com.devonfw.tools.ide.tool.mvn.Mvn;
import com.devonfw.tools.ide.tool.msvc.Msvc;
import com.devonfw.tools.ide.tool.mvn.Mvn;
import com.devonfw.tools.ide.tool.mvnd.Mvnd;
import com.devonfw.tools.ide.tool.nest.Nest;
import com.devonfw.tools.ide.tool.ng.Ng;
import com.devonfw.tools.ide.tool.node.Node;
Expand Down Expand Up @@ -172,6 +172,7 @@ public CommandletManagerImpl(IdeContext context) {
add(new Nest(context));
add(new Cdk(context));
add(new Claude(context));
add(new Mvnd(context));
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.devonfw.tools.ide.tool.mvn;


import java.util.Set;


import com.devonfw.tools.ide.common.Tag;
import com.devonfw.tools.ide.completion.AutoCompletionRegistry;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.tool.LocalToolCommandlet;


/**
* Abstract base class for Maven-compatible tool commandlets.
*/
public abstract class MavenCommandlet extends LocalToolCommandlet {


/**
* The constructor.
*
* @param context the {@link IdeContext}.
* @param tool the name of the tool.
*/
protected MavenCommandlet(IdeContext context, String tool) {

super(context, tool, Set.of(Tag.JAVA, Tag.BUILD));
}

/**
* Initializes common Maven auto-completion candidates.
*
* @param registry the {@link AutoCompletionRegistry} to initialize.
*/
@Override
protected void initAutoCompletionRegistry(AutoCompletionRegistry registry) {

registry.add("clean");
registry.add("package");
registry.add("install");
registry.add("deploy");
registry.add("test");
registry.add("verify");
registry.add("validate");
registry.add("compile");
registry.add("dependency:tree");
registry.add("dependency:list");
registry.add("help:effective-settings");
registry.add("-DskipTests");
registry.add("-Dmaven.test.skip=true");
registry.add("exec:java");
registry.add("-Dexec.mainClass=");
registry.add("-Dexec.args=");
registry.add("-P");
registry.add("-pl");
registry.add("-am");
registry.add("-amd");
registry.add("--also-make");
registry.add("--also-make-dependents");
registry.add("--fail-at-end");
registry.add("--fail-fast");
registry.add("-T1C");
registry.add("-q");
registry.add("-X");
registry.add("-e");
registry.add("-U");
registry.add("-o");
registry.add("-f");
registry.add("-s");
registry.add("-rf");
registry.add("-DdeployAtEnd=true");
}
}


38 changes: 3 additions & 35 deletions cli/src/main/java/com/devonfw/tools/ide/tool/mvn/Mvn.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,23 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.devonfw.tools.ide.common.Tag;
import com.devonfw.tools.ide.completion.AutoCompletionRegistry;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.git.GitContext;
import com.devonfw.tools.ide.io.FileAccess;
import com.devonfw.tools.ide.process.ProcessContext;
import com.devonfw.tools.ide.process.ProcessMode;
import com.devonfw.tools.ide.process.ProcessResult;
import com.devonfw.tools.ide.step.Step;
import com.devonfw.tools.ide.tool.LocalToolCommandlet;
import com.devonfw.tools.ide.tool.ToolCommandlet;
import com.devonfw.tools.ide.tool.ToolInstallRequest;
import com.devonfw.tools.ide.variable.IdeVariables;
import com.devonfw.tools.ide.variable.VariableSyntax;


/**
* {@link ToolCommandlet} for <a href="https://maven.apache.org/">maven</a>.
*/
public class Mvn extends LocalToolCommandlet {
public class Mvn extends MavenCommandlet {

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

Expand Down Expand Up @@ -70,39 +68,9 @@ public class Mvn extends LocalToolCommandlet {
*/
public Mvn(IdeContext context) {

super(context, "mvn", Set.of(Tag.JAVA, Tag.BUILD));
super(context, "mvn");
}

/**
* Initializes Maven-specific auto-completion candidates.
*
* @param registry the {@link AutoCompletionRegistry} to initialize.
*/
@Override
protected void initAutoCompletionRegistry(AutoCompletionRegistry registry) {

registry.add("clean");
registry.add("package");
registry.add("install");
registry.add("deploy");
registry.add("test");
registry.add("verify");
registry.add("validate");
registry.add("compile");
registry.add("dependency:tree");
registry.add("dependency:list");
registry.add("help:effective-settings");
registry.add("-DskipTests");
registry.add("exec:java");
registry.add("-Dexec.mainClass=");
registry.add("-Dexec.args=");
registry.add("--also-make");
registry.add("--also-make-dependents");
registry.add("--fail-at-end");
registry.add("--fail-fast");
registry.add("-T1C");
registry.add("-DdeployAtEnd=true");
}

@Override
protected void configureToolBinary(ProcessContext pc, ProcessMode processMode) {
Expand Down
86 changes: 86 additions & 0 deletions cli/src/main/java/com/devonfw/tools/ide/tool/mvnd/Mvnd.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.devonfw.tools.ide.tool.mvnd;


import com.devonfw.tools.ide.completion.AutoCompletionRegistry;
import com.devonfw.tools.ide.context.IdeContext;
import com.devonfw.tools.ide.tool.ToolCommandlet;
import com.devonfw.tools.ide.tool.mvn.MavenCommandlet;

/**
* {@link ToolCommandlet} for <a href="https://maven.apache.org/tools/mvnd.html/">maven daemon</a>.
*/
public class Mvnd extends MavenCommandlet {

/**
* The constructor.
*
* @param context the {@link IdeContext}.
*/
public Mvnd(IdeContext context) {

super(context, "mvnd");
}

/**
* Initializes Maven Daemon-specific auto-completion candidates.
*
* @param registry the {@link AutoCompletionRegistry} to initialize.
*/
@Override
protected void initAutoCompletionRegistry(AutoCompletionRegistry registry) {

super.initAutoCompletionRegistry(registry);
registry.add("--status");
registry.add("--stop");
registry.add("--purge");
registry.add("--completion");
registry.add("--diag");
registry.add("--file");
registry.add("-Djava.home=");
registry.add("-Djdk.java.options=");
registry.add("-Dmaven.multiModuleProjectDirectory=");
registry.add("-Dmaven.repo.local=");
registry.add("--settings");
registry.add("-Dmvnd.buildTime=");
registry.add("--builder");
registry.add("-Dmvnd.cancelConnectTimeout=");
registry.add("-Dmvnd.connectTimeout=");
registry.add("-Dmvnd.coreExtensionsExclude=");
registry.add("-Dmvnd.daemonStorage=");
registry.add("-Dmvnd.debug=");
registry.add("-Dmvnd.debug.address=");
registry.add("-Dmvnd.duplicateDaemonGracePeriod=");
registry.add("-Dmvnd.enableAssertions=");
registry.add("-Dmvnd.expirationCheckDelay=");
registry.add("-Dmvnd.home=");
registry.add("-Dmvnd.idleTimeout=");
registry.add("-Dmvnd.jvmArgs=");
registry.add("-Dmvnd.keepAlive=");
registry.add("-Dmvnd.logPurgePeriod=");
registry.add("-Dmvnd.maxHeapSize=");
registry.add("-Dmvnd.maxLostKeepAlive=");
registry.add("-Dmvnd.minHeapSize=");
registry.add("-Dmvnd.minThreads=");
registry.add("-Dmvnd.noBuffering=");
registry.add("-Dmvnd.noDaemon=");
registry.add("-Dmvnd.noModelCache=");
registry.add("-Dmvnd.pluginRealmEvictPattern=");
registry.add("-Dmvnd.propertiesPath=");
registry.add("--raw-streams");
registry.add("-Dmvnd.registry=");
registry.add("-Dmvnd.rollingWindowSize=");
registry.add("--serial");
registry.add("-Dmvnd.socketConnectTimeout=");
registry.add("-Dmvnd.socketFamily=");
registry.add("-Dmvnd.threadStackSize=");
registry.add("--threads");
registry.add("-Dstyle.color=");
registry.add("-Duser.dir=");
registry.add("-Duser.home=");
}

@Override
public String getToolHelpArguments() {
return "--help";
}
}
2 changes: 2 additions & 0 deletions cli/src/main/resources/nls/Help.properties
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ cmd.msvc=Tool commandlet for MSVC (Microsoft Visual C++ Build Tools).
cmd.msvc.detail=MSVC provides the C++ compiler and build tools required by Rust on Windows. Detailed documentation can be found at https://visualstudio.microsoft.com/visual-cpp-build-tools/
cmd.mvn=Tool commandlet for Maven (Build-Tool).
cmd.mvn.detail=Apache Maven is a build automation and dependency management tool for Java projects. Detailed documentation can be found at https://maven.apache.org/guides/index.html
cmd.mvnd=Tool commandlet for Maven Daemon (Performance Wrapper for Maven).
cmd.mvnd.detail=The Maven Daemon (mvnd) is a daemon infrastructure for Maven that helps to reduce the build time. Detailed documentation can be found at https://maven.apache.org/tools/mvnd.html
cmd.nest=Tool commandlet for Nest CLI.
cmd.nest.detail=The Nest CLI is a command-line interface tool that helps you to initialize, develop, and maintain your Nest applications. Detailed documentation can be found at https://docs.nestjs.com/cli/overview
cmd.ng=Tool commandlet for Angular CLI.
Expand Down
2 changes: 2 additions & 0 deletions cli/src/main/resources/nls/Help_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ cmd.msvc=Werkzeug Kommando für MSVC (Microsoft Visual C++ Build-Werkzeuge).
cmd.msvc.detail=MSVC stellt den C++ Compiler und Build-Werkzeuge bereit, die von Rust unter Windows benötigt werden. Detaillierte Dokumentation ist zu finden unter https://visualstudio.microsoft.com/visual-cpp-build-tools/
cmd.mvn=Werkzeug Kommando für Maven (Build-Werkzeug).
cmd.mvn.detail=Apache Maven ist ein Build-Automatisierungs- und Abhängigkeitsverwaltungstool für Java-Projekte. Detaillierte Dokumentation ist zu finden unter https://maven.apache.org/guides/index.html
cmd.mvnd=Werkzeug Kommando für Maven Daemon (Performance-Wrapper für Maven).
cmd.mvnd.detail=Maven Daemon (mvnd) ist ein Performance-Wrapper für Apache Maven, der die Build-Zeit durch die Verwendung eines Daemon-Prozesses erheblich reduziert. Detaillierte Dokumentation ist zu finden unter https://maven.apache.org/tools/mvnd.html
cmd.nest=Werkzeug Kommando für Nest CLI.
cmd.nest.detail=Die Nest CLI ist ein Command‑Line‑Interface‑Tool zur Initialisierung, Entwicklung und Wartung von Nest‑Anwendungen. Detaillierte Dokumentation ist zu finden unter https://docs.nestjs.com/cli/overview
cmd.ng=Werkzeug Kommando für Angular CLI.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,4 +302,40 @@ void testCompleteMavenToolArgumentsForEmptyInput() {
assertThat(candidates.stream().map(CompletionCandidate::text))
.contains("clean", "package", "install", "dependency:list", "dependency:tree", "-DskipTests");
}

/**
* Test of tool argument auto-completion for Maven Daemon.
*/
@Test
void testCompleteMavenDaemonToolArguments() {

// arrange
AbstractIdeContext context = newContext(PROJECT_BASIC, null, false);
CliArguments args = CliArguments.ofCompletion("mvnd", "-Dmvnd.c");

// act
List<CompletionCandidate> candidates = context.complete(args, true);

// assert
assertThat(candidates.stream().map(CompletionCandidate::text))
.contains("-Dmvnd.cancelConnectTimeout=", "-Dmvnd.connectTimeout=", "-Dmvnd.coreExtensionsExclude=");
}

/**
* Test of Maven Daemon tool argument auto-completion for empty input.
*/
@Test
void testCompleteMavenDaemonToolArgumentsForEmptyInput() {

// arrange
AbstractIdeContext context = newContext(PROJECT_BASIC, null, false);
CliArguments args = CliArguments.ofCompletion("mvnd", "");

// act
List<CompletionCandidate> candidates = context.complete(args, true);

// assert
assertThat(candidates.stream().map(CompletionCandidate::text))
.contains("--purge", "--settings", "--completion", "dependency:list", "dependency:tree", "-DskipTests");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ void testIdeCompleterBatch() {
void testIdeCompleterInstall() {

this.reader.setCompleter(newCompleter());
assertBuffer("install mvn ", new TestBuffer("install mv").tab());
assertBuffer("install mvn", new TestBuffer("install mv").tab());
}

/**
Expand All @@ -59,7 +59,7 @@ void testIdeCompleterInstall() {
void testIdeCompleterHelpWithToolCompletion() {

this.reader.setCompleter(newCompleter());
assertBuffer("help mvn ", new TestBuffer("help mv").tab().tab());
assertBuffer("help mvn", new TestBuffer("help mv").tab().tab());
}

/**
Expand Down Expand Up @@ -126,7 +126,7 @@ void testIdeCompleterWithInvalidInputDoesNothing() {
void testIdeCompleterHandlesOptionsBeforeCommand() {

this.reader.setCompleter(newCompleter());
assertBuffer("get-version mvn ", new TestBuffer("get-version mv").tab().tab());
assertBuffer("get-version mvn", new TestBuffer("get-version mv").tab().tab());
}

/**
Expand Down
Loading
Loading