С Play 2 все снова пошло вокруг, и механизм зависимости совместим с Maven и Ivy. Я слышу, как радуются предприятия вверх и вниз по планете.
Тем не менее, это по-прежнему не поможет вам достичь заслуженной славы и славы, если только вам не удастся разместить свое собственное репо Maven / Ivy или не захотите взломать автоматически созданные модели артефактов, которые генерирует Play. Помощь доступна только до тех пор, пока модули Play 2 не получат официальный механизм выпуска, использующий функцию «Страницы» в GitHub. Очень просто, мы будем использовать локальную задачу Play для публикации всех файлов, которые нам нужны, в правильной структуре каталогов, а затем скопировать эту структуру как есть непосредственно на страницы GitHub. Публикация таким способом может быть выполнена менее чем за минуту, после того как вы выполнили первоначальную настройку в GitHub.
Создание хранилища в GitHub
Если ваше имя пользователя GitHub, например, foo , то создание репозитория с именем foo .github.com подключит вас к Pages — то, что вы здесь сделаете, будет доступно по адресу http://foo.github.com. Нет ничего хорошего в GitHubby, когда дело доходит до отображения файлов здесь — то, что вы делаете, это то, что доступно в его исходной форме. Зафиксируйте HTML-файл (назовем его bar.html) и наведите браузер на http://foo.github.com/bar.html, и вы увидите отрендеренный HTML-код, а не его источник. Это делает его идеальным для демонстрации файлов, которые вы хотите представить в их необработанном виде — например, файл jar, содержащий ваш модуль Play 2.
Итак, создайте репозиторий .github.com, клонируйте его в свою рабочую область и перейдите в него. Здесь вы можете скопировать (вроде — см. Позже) хранилище meven.
Чтобы все было хорошо, первый каталог, который вы должны создать, это релизы . Если вы также хотите добавить каталог моментальных снимков, сделайте это на этом уровне.
Примечание. Когда вы впервые создаете репозиторий в GitHub, для его доступности может потребоваться до 10 минут. Если вы не изменили свои настройки электронной почты, вы должны получить уведомление, когда оно будет готово. Это не мешает вам совершать действия в хранилище.
Публиковать файлы локально
Давайте предположим, что ваше имя модуля является уродливым в качестве имени артефакта. Ваш Build.scala выглядит так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
import sbt. _ import Keys. _ import PlayProject. _ object ApplicationBuild extends Build { val appName = "hurdy" val appVersion = "1.0" val appDependencies = Seq( ) val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings( ) } |
(Значение mainLang может быть другим, в зависимости от вашего основного языка).
В корне вашего модуля запустите Play и опубликуйте его локально:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
steve@hex: /tmp/hurdy $ play [info] Loading project definition from /tmp/hurdy/project [info] Set current project to hurdy ( in build file : /tmp/hurdy/ ) _ _ _ __ | | __ _ _ _| | | '_ \| |/ _' | || |_| | __/|_|\____|\__ (_) |_| |__/ play! 2.0, http: //www .playframework.org > Type "help play" or "license" for more information. > Type "exit" or use Ctrl+D to leave this console. [hurdy] $ clean [success] Total time : 0 s, completed Apr 21, 2012 9:49:00 AM [hurdy] $ compile [info] Updating { file : /tmp/hurdy/ }hurdy... [info] Done updating. [info] Compiling 4 Scala sources and 2 Java sources to /tmp/hurdy/target/scala-2 .9.1 /classes ... [success] Total time : 7 s, completed Apr 21, 2012 9:49:08 AM [hurdy] $ publish- local [info] Packaging /tmp/hurdy/target/scala-2 .9.1 /hurdy_2 .9.1-1.0-SNAPSHOT-sources.jar ... [info] Done packaging. [info] Wrote /tmp/hurdy/target/scala-2 .9.1 /hurdy_2 .9.1-1.0-SNAPSHOT.pom [info] :: delivering :: hurdy #hurdy_2.9.1;1.0-SNAPSHOT :: 1.0-SNAPSHOT :: release :: Sat Apr 21 09:49:12 CEST 2012 [info] delivering ivy file to /tmp/hurdy/target/scala-2 .9.1 /ivy-1 .0-SNAPSHOT.xml [info] Generating API documentation for main sources... [info] Packaging /tmp/hurdy/target/scala-2 .9.1 /hurdy_2 .9.1-1.0-SNAPSHOT.jar ... [info] Done packaging. model contains 23 documentable templates [info] API documentation generation successful. [info] Packaging /tmp/hurdy/target/scala-2 .9.1 /hurdy_2 .9.1-1.0-SNAPSHOT-javadoc.jar ... [info] Done packaging. [info] published hurdy_2.9.1 to /home/steve/development/play/play-2 .0 /framework/ .. /repository/local/hurdy/hurdy_2 .9.1 /1 .0-SNAPSHOT /poms/hurdy_2 .9.1.pom [info] published hurdy_2.9.1 to /home/steve/development/play/play-2 .0 /framework/ .. /repository/local/hurdy/hurdy_2 .9.1 /1 .0-SNAPSHOT /jars/hurdy_2 .9.1.jar [info] published hurdy_2.9.1 to /home/steve/development/play/play-2 .0 /framework/ .. /repository/local/hurdy/hurdy_2 .9.1 /1 .0-SNAPSHOT /srcs/hurdy_2 .9.1-sources.jar [info] published hurdy_2.9.1 to /home/steve/development/play/play-2 .0 /framework/ .. /repository/local/hurdy/hurdy_2 .9.1 /1 .0-SNAPSHOT /docs/hurdy_2 .9.1-javadoc.jar [info] published ivy to /home/steve/development/play/play-2 .0 /framework/ .. /repository/local/hurdy/hurdy_2 .9.1 /1 .0-SNAPSHOT /ivys/ivy .xml [success] Total time : 3 s, completed Apr 21, 2012 9:49:15 AM |
Переместите опубликованные файлы в GitHub
Файлы были опубликованы в $ {PLAY_HOME} / repository / local и содержатся в каталоге hurdy . Переместите весь этот каталог в ваш новый git-репозиторий
1
|
cp -rv ${PLAY_HOME} /repository/local/hurdy <your username>.github.com /releases |
Перейдите в каталог .github.com , добавьте все файлы в репозиторий git, зафиксируйте и отправьте их.
1
2
3
|
steve@hex: /tmp/schaloner .github.com$ git add . steve@hex: /tmp/schaloner .github.com$ git commit -m "Added release 1.0 to repository" steve@hex: /tmp/schaloner .github.com$ git push -u origin master |
Используйте зависимость
Создайте новый проект (или откройте старый) и добавьте зависимость и его местоположение.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
object ApplicationBuild extends Build { val appName = "my-cool-project" val appVersion = "2.1" val appDependencies = Seq( "hurdy" %% "hurdy" % "1.0" ) val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings( resolvers + = Resolver.url( "My GitHub Play Repository" , url( "http://<your username>.github.com/releases/" ))(Resolver.ivyStylePatterns) ) } |
Примечание. Play опубликовал файлы в стиле Ivy, поэтому это необходимо указать в файле Build.scala.
Запустите Play в корне приложения и запустите задачу «зависимости». Если все пойдет хорошо — и я уверен, что вы дадите мне знать, если это не так — ваш модуль будет извлечен из GitHub и доступен для вашего приложения.
Указание организации
Поскольку в Build.scala не указано ни одной организации, организация (repository / local / hurdy /hurdy_2.9.1) считается такой же, как и имя модуля. Если вы хотите организацию, добавьте ее в основное определение:
1
2
3
|
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings( organization := "com.example" ) |
Теперь, когда вы публикуете локально, файлы будут помещены в репозиторий / local / com.example /hurdy_2.9.1. В данном случае это каталог com.example, который следует скопировать из локального репозитория в репозиторий GitHub. Build.scala любого приложения, использующего вашу зависимость, будет аналогичным образом:
1
2
3
|
val appDependencies = Seq( "com.example" %% "hurdy" % "1.0" ) |
Реальное доказательство этого работает
Deadbolt 2 в настоящее время доступен с использованием этого механизма, используя http://schaloner.github.com в качестве хранилища. Здесь есть версии release и snapshot, поэтому сборка Scala примеров приложений выглядит следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
import sbt. _ import Keys. _ import PlayProject. _ object ApplicationBuild extends Build { val appName = "deadbolt-usage" val appVersion = "1.1.3-SNAPSHOT" val appDependencies = Seq( "be.objectify" %% "deadbolt-2" % "1.1.3-SNAPSHOT" ) val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings( // Change this to point to your local play repository resolvers + = Resolver.url( "Objectify Play Repository" , url( "http://schaloner.github.com/releases/" ))(Resolver.ivyStylePatterns), resolvers + = Resolver.url( "Objectify Play Repository" , url( "http://schaloner.github.com/snapshots/" ))(Resolver.ivyStylePatterns) ) } |
Если я изменю требуемую версию с 1.1.3-SNAPSHOT (которая находится в каталоге snapshots /) на 1.1.3 (которая будет в каталоге release /), зависимость будет разрешена правильно.
Ссылка: Публикация Play 2 модуля на github от нашего партнера JCG Стива Чалонера в блоге Objectify .