Перейти к содержанию

Разрешение зависимостей в окружении сборки

Пакетные менеджеры некоторых экосистем по умолчанию не включают транзитивные зависимости в манифесты. Для качественного проведения композиционного анализа при работе с ними рекомендуется применять механизм разрешения зависимостей в окружении сборки.

Настройка разрешения зависимостей

При разрешении зависимостей в окружении агент проверяет отсутствие lock-файла, самостоятельно запускает пакетный менеджер или инструмент сборки и формирует полный список компонентов с учетом корректной версии сборки. На данный момент функциональность доступна для следующих экосистем:

  • .NET
  • Go
  • Gradle
  • Maven
  • npm
  • Poetry
  • sbt
  • yarn
  • pip
  • Composer
  • pnpm
  • Conda

Параметры разрешения зависимостей в окружении и пути к пакетному менеджеру регулируются следующими флагами в команде scan:

  • --dotnet-resolve / --dotnet-path
  • --go-resolve / --go-path
  • --gradle-resolve / --gradle-path
  • --maven-resolve / --maven-path
  • --npm-resolve / --npm-path
  • --poetry-resolve / --poetry-path
  • --sbt-resolve / --sbt-path
  • --yarn-resolve / --yarn-path
  • --pip-resolve / --pip-path
  • --composer-resolve / --composer-path
  • --pnpm-resolve / --pnpm-path
  • --conda-resolve / --conda-lock-path

Пример команды:

./johnny \
scan dir . \
--api_token <api_token> \
--api_url <api_url> \
--dotnet-resolve true
--dotnet-path <path/to/dotnet>

При необходимости перечисленные параметры можно добавить в конфигурационный файл агента.

Работа с зависимостями в Java

При работе с Java альтернативно можно создать дополнительные артефакты, содержащие полную структуру зависимостей проекта.

Команда для Apache Maven:

mvn dependency:tree -DoutputFile=maven-dependency-tree.txt

Команда для Gradle:

./gradlew dependencies > gradle-dependency-tree.txt

После создания артефактов необходимо применить команду scan file для полученного артефакта, например:

./johnny \
scan file ./maven-dependency-tree.txt \
--api_token <api_token> \
--api_url <api_url>

Работа с зависимостями в Scala

Для корректного выполнения композиционного анализа в проектах на Scala с использованием sbt выполните следующие шаги:

  1. Настройка ширины графа зависимостей

    Чтобы сгенерировать полный граф зависимостей добавьте следующую строку в файл build.sbt:

    ThisBuild / asciiGraphWidth := 999999999
    

    Альтернативно, можно установить значение asciiGraphWidth глобально.

  2. Генерация дерева зависимостей

    Выполните следующую команду для генерации дерева зависимостей:

    sbt clean compile "dependencyTree::toFile target/tree.txt"
    

    Убедитесь, что файл сохранен с именем scala-dependency-tree.txt или sbt-dependency-tree.txt, так как только эти имена поддерживаются для корректного парсинга.

  3. Сканирование сгенерированного файла

    Флаг --sbt-resolve в команде сканирования в данном случае не нужен, поскольку выполняется сканирование уже сгенерированного дерева с полной структурой зависимостей.