Я пытаюсь использовать плагин sbt-web без рамки для воспроизведения и вместо этого создаю webapp с помощью xsbt-web-плагина.Как использовать sbt-web-выход с помощью xsbt-web-plugin через зависимость проекта SBT?
Я получил плагин sbt-web, правильно работающий с обработкой конвейера активов и создающий его действительный выход webjar (через packageBin), а также стандартный вывод «web/public/main» (через активы).
Отдельно, я использую xsbt-web-plugin для разработки webapp и обслуживания этого webapp изнутри SBT (через контейнер: начало). Проект webapp может потреблять зависимости webjar от mavenCentral и ссылаться на эти ресурсы без проблем.
Что я не смог выяснить, как я могу заставить xsbt-web-плагин включать активы, выходящие из конвейера sbt-web в веб-приложении. Кажется, что я могу сделать, чтобы получить их в CLASSPATH. (Из того, что я понимаю, это все, что нужно для игры, потому что у них есть «Контроллер активов», который обслуживает эти активы из CLASSPATH, и поэтому им не нужно, чтобы они были доступны как статические активы для веб-приложения).
Я сделал публичный репозиторий GitHub (https://github.com/MartinSnyder/serving-sbt-web-output), который демонстрирует то, что я пытаюсь сделать.
Мой plugins.sbt является:
resolvers += Resolver.typesafeRepo("releases")
addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.1.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "1.0.0")
Мой build.sbt является:
name := "Example project serving sbt-web output from within SBT"
organization in ThisBuild := "com.martinsnyder"
version in ThisBuild := "0.0.1"
scalaVersion in ThisBuild := "2.11.6"
lazy val example_webjar =
project
.in(file("example_webjar"))
.settings(libraryDependencies ++= Seq("org.webjars" % "requirejs" % "2.1.16"))
.enablePlugins(SbtWeb)
lazy val example_webapp =
project
.in(file("example_webapp"))
.dependsOn(example_webjar)
.settings(libraryDependencies ++= Seq(
"javax.servlet" % "servlet-api" % "2.5" % "provided",
"org.eclipse.jetty" % "jetty-webapp" % "9.3.0.M2" % "container",
"org.eclipse.jetty" % "jetty-plus" % "9.3.0.M2" % "container",
"commons-logging" % "commons-logging" % "1.2" % "container"
))
.enablePlugins(SbtWeb)
.settings(jetty(): _*)
файл HTML в веб-приложение является:
<html>
<head>
<title>Example</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
<link rel="stylesheet" type="text/css" href="lib/example_webjar/css/main.css">
<link rel="stylesheet" type="text/css" href="webjar/example_webjar/0.0.1/css/main.css">
<script src="webjars/requirejs/2.1.16/require.js"></script>
</head>
<body>
<div class="red">Red</div>
<div class="green">Green</div>
</body>
</html>
На данном этапе, requirejs успешно обслуживается, поскольку он исходит из веб-сайта предварительной сборки. Три тега отличаются друг от друга и неудачные попытки ссылаться на вывод активов из sbt-web.
Лучший сценарий, я пытаюсь добиться, чтобы получить SBT-веб плагин вывода (цель/веб/общественности/основной/) включены в выходной xsbt-веб-плагин WebAPP (цель/веб-приложение/). Я бы согласился, что xsbt-web-плагин сможет получить доступ к зависимости проекта как webjar.
Примечание: я ничего не знаю о sbt-web, поэтому дайте мне знать, что еще не хватает, и я посмотрю, смогу ли я исправить свой ответ. – earldouglas
Спасибо Джеймсу. Это и есть. Самая близкая попытка, которую я имел в этом направлении, отсутствовала в «WebKeys». Для других людей, читающих это, основное ограничение этого подхода состоит в том, что может быть только одна папка webappSrc, поэтому, если у вас есть сеть.xml вам нужно замять это в «активы», хотя на самом деле это не так. –
Для справки, Мартин [открыл проблему] (https://github.com/earldouglas/xsbt-web-plugin/issues/228) для улучшения поддержки xsbt-web-плагинов для этого. – earldouglas