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) не дает никакого эффекта.
Я перепробовал все рекомендации VonC (спасибо!!), но безрезультатно, ошибка осталась прежней. Я больше не думаю, что дело в том, что в PATH отсутствует эта доморощенная папка: я нашел точное место, где выдается исключение, добавил точку останова, и можно увидеть следующее:
Я читаю эту отладочную информацию следующим образом: ProcessBuilder получает правильный PATH, но под ним что-то еще не так. Если бы это была ошибка, была бы она в IntelliJ, Gradle, Java или Mac OS?
/opt/homebrew/bin: вроде всё в порядке.PATH, содержащей пробелы, и перезагрузка компьютера: не помогает.Запуск 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», теперь кажется мне очень подозрительным.


После того, как я попробовал все, что указано в моем вопросе выше, и потерпел неудачу, помогло следующее:
% sudo launchctl config user path /opt/homebrew/bin/
Вдохновлено здесь https://stackoverflow.com/a/71061556/992988
Это также помогло на моем компьютере прямо сейчас, когда SonarLint не смог запуститься, утверждая (почти таким же образом), что он не может запустить «безопасность» (имеется в виду /usr/bin/security). Добавление /usr/bin/ к пути с помощью launchctl, как указано выше, все исправило...
Вы видели это: stackoverflow.com/questions/33575082/…. Может быть полезно. Возможно, разрешения с
node.