Проблемы с обновлением gradle plugin io.jmix в закрытой сети

Здравствуйте!
Idea показала возможность обновления до версии 2.1.2, нажал обновить, однако при старте сборки gradle выдало ошибку:

* What went wrong:
Plugin [id: 'io.jmix', version: '2.1.2'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'io.jmix:io.jmix.gradle.plugin:2.1.2')
  Searched in the following repositories:
    Gradle Central Plugin Repository

Сразу поясню что интернета нет (а то бы и проблем не было), но есть доступ к nexus.jmix.io (про обновление же idea как-то узнала). Скачал новый клиент идеи и обновил вручную, обновил вручную версию плагина jmix для идеи (до 2.1.2).

Подсмотрел в теме про работу в изолированной сети, что можно добавить в gradle.settings строчки про плагины со ссылкой на свой репозиторий, скопировал это и поменял localhost на адрес nexus:

pluginManagement {
    resolutionStrategy {
        eachPlugin {
            if (requested.id.id == 'io.jmix') {
                useModule("io.jmix.gradle:jmix-gradle-plugin:${requested.version}")
            }
        }
    }
    repositories {
        maven {
            allowInsecureProtocol true
            url 'https://nexus.jmix.io/repository/public'
        }
    }
}

Опять выдало ошибку:

* What went wrong:
Plugin [id: 'io.jmix', version: '2.1.2', artifact: 'io.jmix.gradle:jmix-gradle-plugin:2.1.2'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'io.jmix.gradle:jmix-gradle-plugin:2.1.2')
  Searched in the following repositories:
    maven(https://nexus.jmix.io/repository/public)

Скачал из темы про работу в изолированной сети архив с зависимостями, но поиском там не нашёл ничего, связанного с jmix. На сайте плагинов gradle нашёл адрес этого плагина, но не нашёл информации как его можно скачать и установить вручную, по типу как вручную приходится ставить зависимости, которых нет в репозитории nexus.

Подскажите что можно сделать в этой ситуации?

п.с.: реализовать тему с полностью локальным репозиторием как описано тут очень и очень проблематично, т.к. на компьютере с интернетом ничего нельзя устанавливать и делать, кроме как сидеть в браузере и максимум качать файлы и перетаскивать их себе.

Добрый день!

Действительно мы не публикуем релизы Jmix Gradle plugin в этом репозитории. Однако по некоторому стечению обстоятельств там публикуются снапшоты. Поэтому самое простое для вас - объявить версию плагина так:

plugins {
    id 'io.jmix' version '2.1.999-SNAPSHOT'

Мы подумаем о публикации релизов в этом репозитории.

С уважением,
Константин

Такой шаг даст доступ ко всем доработкам в версии 2.1.2?

Было бы идеально, заранее спасибо!

Да, но теоретически может внести нестабильность в процесс сборки. Вероятность невысокая, так как в плагине в рамках релиза (2.1) обычно не делается серьезных изменений.

Опубликовали плагин 2.1.2 в nexus.jmix.io.

Спасибо, вижу что на плагин больше не ругается.

Но полноценно без интернета не получается обновится до версии 2.1.2, не находит часть зависимостей фронтенда при запуске приложения, пока никак не можем решить эту проблему. Пытались подкладывать в собственный nexus те зависимости, которые он требовал в логах, но ему постоянно требовались новые.
С nexus от jmix такая же история, ругается что не найдены зависимости. Попробовал заменить public на premium, тоже не помогло(.

npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/board@24.1.15
npm WARN node_modules/@vaadin/board
npm WARN   @vaadin/board@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/board@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/charts@24.1.15
npm WARN node_modules/@vaadin/charts
npm WARN   @vaadin/charts@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/charts@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/cookie-consent@24.1.15
npm WARN node_modules/@vaadin/cookie-consent
npm WARN   @vaadin/cookie-consent@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/cookie-consent@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/crud@24.1.15
npm WARN node_modules/@vaadin/crud
npm WARN   @vaadin/crud@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/crud@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/grid-pro@24.1.15
npm WARN node_modules/@vaadin/grid-pro
npm WARN   @vaadin/grid-pro@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/grid-pro@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/map@24.1.15
npm WARN node_modules/@vaadin/map
npm WARN   @vaadin/map@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/map@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm WARN ERESOLVE overriding peer dependency
npm WARN While resolving: no-name@undefined
npm WARN Found: @vaadin/rich-text-editor@24.1.15
npm WARN node_modules/@vaadin/rich-text-editor
npm WARN   @vaadin/rich-text-editor@"23.3.0" from the root project
npm WARN 
npm WARN Could not resolve dependency:
npm WARN peerOptional overridden @vaadin/rich-text-editor@"23.3.0" (was "24.1.15") from @vaadin/bundles@24.1.15
npm WARN node_modules/@vaadin/bundles
npm WARN   @vaadin/bundles@"24.1.15" from the root project
npm ERR! code E404
npm ERR! 404 Not Found - GET https://nexus.jmix.io/repository/public/@vaadin%2fboard
npm ERR! 404 
npm ERR! 404  '@vaadin/board@23.3.0' is not in this registry.
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

Есть возможность сделать так, чтобы все необходимые зависимости можно было без интернета, но с доступом к nexus.jmix.io получать и обновляться?

Если у вас есть собственный Nexus, то почему бы не воспользоваться подходом описанным в Работа в изолированной сети :: Документация Jmix?
Мы специально собираем и публикуем архивы со всеми зависимостями, в том числе с NPM-зависимостями для версии 2.x.

Мы так и пытались, но ошибки ровно те же самые, что и через nexus.jmix.io. При этом версия 2.1.1 успешно обновляется через собственный nexus (как раз собранный по теме работа в изолированной сети), если вручную удалить из файла package.json все зависимости с версией 23.3.0.
Для версии 2.1.2 такой финт не работает, она требует что то еще.

Мы проверим архив для 2.1.2 и постараемся решить проблему.

Добрый день.

Первичная проверка не выявила проблем с frontend зависимостями при использовании опубликованных архивов версии 2.1.2.

  • Пожалуйста сообщите конкретный список используемых аддонов, на случай какой-то специфической комбинации (можно просто приложить build.gradle). Если проблема воспроизводится на свежем пустом проекте без дополнительных аддонов - данный шаг необязателен.
  • Вы упомянули удаление из файла package.json. В этом подходе сам по себе package.json не используется - необходимо использовать package-lock.json, поставляемый в архиве с NPM-зависимостями конкретной версии.
    1. Удалите из проекта файлы package.json, package-lock.json, pnpm-lock.yaml (если присутствуют).
    2. Скопируйте package-lock.json из архива с NPM-зависимостями.
    3. Убедитесь, что свойство vaadin.pnpm.enable имеет значение falseapplication.properties)

С уважением,
Иван

Удаление package.json и подмена package-lock.json из бесплатного архива с npm помогло. Видимо из-за того что проект уже был создан когда-то с интернетом и было много всего в кешах idea, gradle и nodejs.
Хотя в одной из попыток пробовали удалить package.json, но при старте проекта выдавало ошибку что файл не найден (не сохранилось логов к сожалению).
Удалось обновиться до версии 2.1.2 с “бесплатным” архивом. Спасибо.
Сейчас будем ломать голову как перенести все платные зависимости в локальный nexus в своей сети. Как я понял их можно выгружать из nexus.jmix.io руками и добавлять в свой nexus, если войти с логином и паролем. Останется только сформировать “платный” package-lock.json.

Если у вас есть лицензия, то с помощью deptool вы можете собрать архив с java-зависимостями, включающий в том числе и платные аддоны - Работа в изолированной сети :: Документация Jmix.

А опубликованный архив с npm-пакетами уже содержит объединенный скоуп frontend-зависимостей, используемых как бесплатными, так и платными Jmix-аддонами. Поэтому в общем случае его собирать еще раз не нужно (но можно при необходимости, используя ту же инструкцию).

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

Я попробовал создать новый проект с настройками проекта как под изолированную сеть, но вместо локального nexus везде указывал nexus.jmix.io (к нему нам открыт доступ). И проект собрался и стартовал, благо недавно добавили туда gradle-плагин версии 2.1.2. Есть конечно вероятность что могло что-либо подтянуться из кеша, но думаю мы проверим на пустом компьютере.

То есть получился некий гибрид работы в изолированной сети, но без нужны собираться своей nexus.

Остаётся только пара вопросов: чтобы пользоваться платными аддонами, нужно ли другой package-lock.json (не тот что из архива с бесплатными зависимостями)? Если несколько лицензий, то с nexus.jmix.io зависимости платных аддонов подтянуться в соответствии с введённой в idea лицензий?

  1. Нужно ли другой package-lock.json - нет. Используемые NPM-пакеты сами по себе - бесплатные 3rd-party зависимости. Поэтому нами архив собирается сразу с максимальным охватом и содержит все зависимости, потенциально необходимые как бесплатным, так и платным аддонам.
  2. Доступ к премиум репозиторию осуществляется с использованием логина и пароля, взятых с лицензии.

Отлично, спасибо большое за объяснения!
Наконец-то удалось выстроить более менее рабочую схему без интернета))