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