Использовать зависимости 2.0 и SNAPSHOT - программирование
Подтвердить что ты не робот

Использовать зависимости 2.0 и SNAPSHOT

Я создаю свое первое приложение для игры в смешанной среде сборки. Моя компания использует maven для всего (до сих пор), и я пытаюсь заставить свое игровое приложение хорошо взаимодействовать с остальными моими артефактами.

Есть ли способ получить плющ /sbt/play для работы с SNAPSHOTs аналогично maven - а именно, либо обновлять их из удаленного репозитория всегда (например, у строителя), либо использовать локальный .m2 репозиторий до истечения срока действия зависимостей, а затем обновить его с сервера.

Я объявил зависимость SNAPSHOT в моей сборке Build.scala для артефакта, и я хотел бы, чтобы локальные обновления этой зависимости были видимыми для моего игрового проекта. На стороне maven я делаю следующее

mvn clean install

который (конечно) строит и устанавливает мой внешний артефакт в мой локальный репозиторий maven (в ~/.m2/repository). Я хотел бы, чтобы эти изменения были немедленно видны в моем игровом проекте, но я не могу понять, как сказать sbt/play, чтобы не кэшировать SNAPSHOT. Независимо от того, что я делаю, эта зависимость никогда не обновляется в игре - я должен зайти в реальный кеш плюща игры и вручную удалить зависимые для любых изменений, которые нужно подобрать. В идеале я бы хотел, чтобы sbt/ivy просто разрешил путь к моему локальному репозиторию maven и не кэшировал его внутренне. У меня есть следующее в моей Build.scala

val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += "Local Maven Repository" at "file://" + Path.userHome.absolutePath + "/.m2/repository",
    testOptions in Test := Nil
)

Когда я запускаю сборку в игре, она правильно использует это репо, но затем кэширует результаты в кэш плюща. Есть ли заклинание, которое я могу сказать Ivy/sbt, чтобы не делать этого? Возможно, что-то в ivysettings.xml?

4b9b3361

Ответ 1

@kheraud → clean/reload/update → не будет работать sbt кэширует его локально и не проверяет снова для нового моментального снимка в локальном maven

@dprat → Я искал решение в сети и не нашел ничего больше:( Я сдался - просто удалите свой локальный пакет в кэш плюща и сделайте play update вы можете упростить его и сделать script

rm -rf ~/.ivy2/cache/your.package.foo
play update compile

Ответ 2

В другом месте я видел, что это связано с дефектом SBT https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

Одним из решений является использование Nexus. Вам нужно будет установить из maven в nexus. Вам нужно будет использовать путь нексуса вместо mvn. Вам нужно будет установить и запустить nexus!

Чтобы установить nexus, перейдите в сонатип и загрузите. Наблюдайте за правами доступа к файлам (читайте инструкции), но это просто. Вам нужно будет ввести учетные данные в ~/.m2/settings.xml. По умолчанию используется admin, admin123.

<settings>
  <servers>
    <server>
      <id>snapshots</id>
      <username>admin</username>
        <password>admin123</password>
    </server>
  </servers>
</settings>

Развертывание maven предоставляется вам по nexus, например:

<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://0.0.0.0:8081/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://0.0.0.0:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

Затем mvn deploy разместит ваш ресурс.

Затем в play sbt используйте

resolvers += "Local Nexus Repository" at "http://0.0.0.0:8081/nexus/content/repositories/snapshots"

Вам все равно нужно остановить воспроизведение, использовать обновление воспроизведения и перезапустить игру.

Ответ 3

Вы можете использовать:

  • play reload//Обновить текущий файл сборки приложения
  • play update//Обновление зависимостей приложений

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

Ответ 4

Я не уверен, как это работает, но "другой парень сказал мне" - да, что поможет моя ссылка на это - очистка папки "репозитория" в установке воспроизведения.

У меня есть немного "refresh.sh" script, который делает это:

rm -rf /opt/play/repository/cache/com.mycompany
play clean
play update
play run

Кажется, это работает для меня. Где "/opt/play" - это место, где у вас установлена ​​игра, а "com.mycompany" - это то, что вам нужно обновить.

Я не говорю, что это правильно, но это может стоить выстрела, если ничего не работает.

Ответ 5

Начиная с версии sbt 0.13.6 (август 2014), можно использовать флаг настроек сборки updateOptions в Build.scala/build.sbt для управления разрешением SNAPSHOT.

updateOptions := updateOptions.value.withLatestSnapshots(false/true)

Документация об этой новой функции здесь

Соответствующий запрос на перенос на github для деталей.