Использовать зависимости 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?
Ответы
Ответ 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 для деталей.