diff --git a/README.md b/README.md
index 5806a46..4f78384 100644
--- a/README.md
+++ b/README.md
@@ -85,6 +85,12 @@ according to your preferences.
If the paths are not provided, your IDE's `PATH` and `JAVA_HONE` environments will be used to locate the
executables.
+- **Maven Wrappers** :
+
`preferWrapper`: Configure whether to use Maven wrapper. There are three options available:
+
`true`: Always use the wrapper regardless of `Build,Execution,Deployment › Build Tools > Maven: Maven home path` setting
+
`false`: Never use the wrapper regardless of `Build,Execution,Deployment › Build Tools > Maven: Maven home path` setting
+
`fallback`: Use IntelliJ's `Build,Execution,Deployment › Build Tools > Maven: Maven home path` setting (default behavior)
+
- **Node** :
Set the full path of the Node executable, which allows Exhort to locate and run one of the corresponding `npm`, `pnpm` or `yarn` command to resolve
dependencies for Node projects.
diff --git a/gradle.properties b/gradle.properties
index 3decb6c..0641812 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -9,7 +9,7 @@ ideaVersion=2025.1
gradleVersion=8.5
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
-platformBundledPlugins=org.jetbrains.plugins.yaml,com.intellij.java
+platformBundledPlugins=org.jetbrains.plugins.yaml,com.intellij.java,org.jetbrains.idea.maven
platformPlugins=com.redhat.devtools.intellij.telemetry:1.1.0.52,org.jetbrains.plugins.go:251.23774.200,Docker:251.23774.37
# Opt-out flag for bundling Kotlin standard library -> https://jb.gg/intellij-platform-kotlin-stdlib
diff --git a/src/main/java/org/jboss/tools/intellij/exhort/ApiService.java b/src/main/java/org/jboss/tools/intellij/exhort/ApiService.java
index 9600b3f..abe6d97 100644
--- a/src/main/java/org/jboss/tools/intellij/exhort/ApiService.java
+++ b/src/main/java/org/jboss/tools/intellij/exhort/ApiService.java
@@ -23,6 +23,7 @@
import com.redhat.exhort.api.v4.AnalysisReport;
import com.redhat.exhort.impl.ExhortApi;
import org.jboss.tools.intellij.settings.ApiSettingsState;
+import org.jboss.tools.intellij.settings.MavenSettingsUtil;
import java.io.IOException;
import java.nio.file.Files;
@@ -133,7 +134,20 @@ private void setRequestProperties(final String manifestName) {
} else {
System.clearProperty("EXHORT_MVN_PATH");
}
- if (settings.gradlePath != null && !settings.gradlePath.isBlank()) {
+
+ if (settings.useMavenWrapper.equals("fallback")) {
+ if (MavenSettingsUtil.isMavenWrapperSelected()) {
+ System.setProperty("EXHORT_PREFER_MVNW", settings.useMavenWrapper);
+ } else {
+ System.clearProperty("EXHORT_PREFER_MVNW");
+ }
+ } else if (settings.useMavenWrapper.equals("true")) {
+ System.setProperty("EXHORT_PREFER_MVNW", settings.useMavenWrapper);
+ } else {
+ System.clearProperty("EXHORT_PREFER_MVNW");
+ }
+
+ if (settings.gradlePath != null && !settings.gradlePath.isBlank()) {
System.setProperty("EXHORT_GRADLE_PATH", settings.gradlePath);
} else {
System.clearProperty("EXHORT_GRADLE_PATH");
diff --git a/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsComponent.java b/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsComponent.java
index 0f597b1..45bb5f9 100644
--- a/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsComponent.java
+++ b/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsComponent.java
@@ -12,6 +12,7 @@
package org.jboss.tools.intellij.settings;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
+import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.TextComponentAccessor;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.ui.components.JBCheckBox;
@@ -27,6 +28,10 @@ public class ApiSettingsComponent {
private final static String mvnPathLabel = "Maven > Executable: Path"
+ "
Specifies absolute path of mvn executable.";
+ private final static String useMavenWrapperLabel = "Maven: Prefer Wrapper"
+ + "
Specifies whether to use the local maven wrapper."
+ + "
The 'fallback' option will default to Build,Execution,Deployment › Build Tools > Maven: Maven home path setting"
+ + "
Else defaulting to 'true'.";
private final static String javaPathLabel = "Maven > JAVA_HOME: Path"
+ "
Specifies absolute path of Java installation directory.";
private final static String npmPathLabel = "Npm > Executable: Path"
@@ -73,6 +78,7 @@ public class ApiSettingsComponent {
private final JPanel mainPanel;
private final TextFieldWithBrowseButton mvnPathText;
+ private final ComboBox useMavenWrapperCombo;
private final TextFieldWithBrowseButton javaPathText;
private final TextFieldWithBrowseButton npmPathText;
private final TextFieldWithBrowseButton pnpmPathText;
@@ -108,6 +114,10 @@ public ApiSettingsComponent() {
TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT
);
+ useMavenWrapperCombo = new ComboBox<>(new String[]{"fallback", "true", "false"});
+ useMavenWrapperCombo.setEditable(false);
+ useMavenWrapperCombo.setSelectedIndex(0);
+
javaPathText = new TextFieldWithBrowseButton();
javaPathText.addBrowseFolderListener(
null,
@@ -257,6 +267,8 @@ public ApiSettingsComponent() {
mainPanel = FormBuilder.createFormBuilder()
.addLabeledComponent(new JBLabel(mvnPathLabel), mvnPathText, 1, true)
.addVerticalGap(10)
+ .addLabeledComponent(new JBLabel(useMavenWrapperLabel), useMavenWrapperCombo, 1, true)
+ .addVerticalGap(10)
.addLabeledComponent(new JBLabel(javaPathLabel), javaPathText, 1, true)
.addSeparator(10)
.addVerticalGap(10)
@@ -324,6 +336,14 @@ public void setMvnPathText(@NotNull String text) {
mvnPathText.setText(text);
}
+ public String getUseMavenWrapperCombo() {
+ return useMavenWrapperCombo.getSelectedItem().toString();
+ }
+
+ public void setUseMavenWrapperCombo(@NotNull String text) {
+ useMavenWrapperCombo.setSelectedItem(text);
+ }
+
@NotNull
public String getJavaPathText() {
return javaPathText.getText();
diff --git a/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsConfigurable.java b/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsConfigurable.java
index 684e92c..7accd43 100644
--- a/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsConfigurable.java
+++ b/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsConfigurable.java
@@ -40,6 +40,7 @@ public JComponent getPreferredFocusedComponent() {
public boolean isModified() {
ApiSettingsState settings = ApiSettingsState.getInstance();
boolean modified = !settingsComponent.getMvnPathText().equals(settings.mvnPath);
+ modified |= settingsComponent.getUseMavenWrapperCombo() != settings.useMavenWrapper;
modified |= !settingsComponent.getJavaPathText().equals(settings.javaPath);
modified |= !settingsComponent.getNpmPathText().equals(settings.npmPath);
modified |= !settingsComponent.getPnpmPathText().equals(settings.pnpmPath);
@@ -68,6 +69,7 @@ public boolean isModified() {
public void apply() {
ApiSettingsState settings = ApiSettingsState.getInstance();
settings.mvnPath = settingsComponent.getMvnPathText();
+ settings.useMavenWrapper = settingsComponent.getUseMavenWrapperCombo();
settings.javaPath = settingsComponent.getJavaPathText();
settings.npmPath = settingsComponent.getNpmPathText();
settings.pnpmPath = settingsComponent.getPnpmPathText();
@@ -95,6 +97,7 @@ public void apply() {
public void reset() {
ApiSettingsState settings = ApiSettingsState.getInstance();
settingsComponent.setMvnPathText(settings.mvnPath != null ? settings.mvnPath : "");
+ settingsComponent.setUseMavenWrapperCombo(settings.useMavenWrapper);
settingsComponent.setJavaPathText(settings.javaPath != null ? settings.javaPath : "");
settingsComponent.setNpmPathText(settings.npmPath != null ? settings.npmPath : "");
settingsComponent.setPnpmPathText(settings.pnpmPath != null ? settings.pnpmPath : "");
diff --git a/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsState.java b/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsState.java
index 1dec288..193c2c0 100644
--- a/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsState.java
+++ b/src/main/java/org/jboss/tools/intellij/settings/ApiSettingsState.java
@@ -36,6 +36,7 @@ public final class ApiSettingsState implements PersistentStateComponent 0) {
+ project = openProjects[0];
+ } else {
+ project = ProjectManager.getInstance().getDefaultProject();
+ }
+ MavenGeneralSettings settings = MavenWorkspaceSettingsComponent.getInstance(project).getSettings().getGeneralSettings();
+ MavenHomeType mavenHomeType = settings.getMavenHomeType();
+ return mavenHomeType instanceof MavenWrapper;
+ }
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 7ffe6d7..a02ba0d 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -97,6 +97,15 @@
If the paths are not provided, your IDE's PATH and JAVA_HONE environments will be
used to locate the executables.
+
+
+ Maven Wrapper:
+
preferWrapper : Configure whether to use Maven wrapper. There are three options available
+
true: Always use the wrapper regardless of Build,Execution,Deployment › Build Tools > Maven: Maven home path setting
+
false: Never use the wrapper regardless of Build,Execution,Deployment › Build Tools > Maven: Maven home path setting
+
fallback: Use IntelliJ's Build,Execution,Deployment › Build Tools > Maven: Maven home path setting (default behavior)
+
+
Node:
Set the full path of the Node executable, which allows Exhort to locate and execute one of the corresponding npm, pnpm or yarn command
@@ -421,6 +430,8 @@
com.intellij.modules.lang
+ com.intellij.java
+ org.jetbrains.idea.maven
com.redhat.devtools.intellij.telemetry
Docker
org.jetbrains.plugins.go