IntelliJ IDEA не выбирает PATH и не может найти npm

IntelliJ IDEA 2024.1 (та же проблема в предыдущих версиях) в Mac OS 14.4.1, соответствующая часть build.gradle выглядит следующим образом:

def buildAssets = tasks.register('buildAssets') {
  ...

  doLast {
    ...
    exec {
      workingDir "$projectDir/assets"
      commandLine 'npm', 'install'
    }
  }

При запуске получаю следующую ошибку:

Execution failed for task ':buildAssets'.
> A problem occurred starting process 'command 'npm''

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':buildAssets'.
    at ...
    at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'npm''
    at ...
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:79)
    ... 2 more
Caused by: java.io.IOException: Cannot run program "npm" (in directory "/Users/.../my-project/assets"): error=2, No such file or directory
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
    ... 7 more
Caused by: java.io.IOException: error=2, No such file or directory
    ... 8 more

Если я укажу полный путь к команде npm (который у меня есть от Homebrew), все будет работать нормально:

def buildAssets = tasks.register('buildAssets') {
  ...

  doLast {
    ...
    exec {
      workingDir "$projectDir/assets"
      commandLine '/opt/homebrew/bin/npm', 'install'
    }
  }

Какие места в профиле пользователя/конфигурации IDEA/конфигурации проекта мне следует изучить?

Расследование на данный момент

В терминале IntelliJ: "Это здесь!"

% which npm
/opt/homebrew/bin/npm

«Это на ПУТИ!»

% echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:...

Редактировать:

Переключение Gradle с gradlew на локально установленный (/opt/homebrew/bin/gradle) не дает никакого эффекта.

Редактировать 2:

Я перепробовал все рекомендации VonC (спасибо!!), но безрезультатно, ошибка осталась прежней. Я больше не думаю, что дело в том, что в PATH отсутствует эта доморощенная папка: я нашел точное место, где выдается исключение, добавил точку останова, и можно увидеть следующее:

Я читаю эту отладочную информацию следующим образом: ProcessBuilder получает правильный PATH, но под ним что-то еще не так. Если бы это была ошибка, была бы она в IntelliJ, Gradle, Java или Mac OS?

Некоторые другие вещи, которые я пробовал

  • Проверяем разрешения в /opt/homebrew/bin: вроде всё в порядке.
  • Удаление папки PATH, содержащей пробелы, и перезагрузка компьютера: не помогает.

Редактировать 3 (предложения VonC):

Запуск npm install непосредственно в терминале в IDEA работает нормально:

% cd assets 
assets % npm install

up to date, audited 476 packages in 788ms

60 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
assets % 

npm действительно кажется символической ссылкой:

% ls -l $(which npm)
lrwxr-xr-x  1 vektor  admin  40 Apr 11 11:33 /opt/homebrew/bin/npm -> /opt/homebrew/Cellar/node/21.7.3/bin/npm

IDEA, похоже, имеет все необходимые разрешения, отдельная Java-программа, запущенная вне IDEA, работает нормально. brew doctor сообщает о некоторых устаревших пакетах (пока-пока youtube-dl наверное :( ), но других проблем нет.

Мне все равно придется проверить версию Java/JDK позже. Тот факт, что отладчик показывает, что «все в порядке вплоть до выполнения собственного кода в ProcessBuilder», теперь кажется мне очень подозрительным.

Вы видели это: stackoverflow.com/questions/33575082/…. Может быть полезно. Возможно, разрешения с node.

morganney 14.04.2024 02:16
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
2
1
326
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После того, как я попробовал все, что указано в моем вопросе выше, и потерпел неудачу, помогло следующее:

% sudo launchctl config user path /opt/homebrew/bin/

Вдохновлено здесь https://stackoverflow.com/a/71061556/992988

Это также помогло на моем компьютере прямо сейчас, когда SonarLint не смог запуститься, утверждая (почти таким же образом), что он не может запустить «безопасность» (имеется в виду /usr/bin/security). Добавление /usr/bin/ к пути с помощью launchctl, как указано выше, все исправило...

vektor 30.05.2024 12:57

Другие вопросы по теме