gpt4 book ai didi

sbt - 如何通过 SBT 项目依赖项将 sbt-web 输出与 xsbt-web-plugin 一起使用?

转载 作者:行者123 更新时间:2023-12-01 23:46:14 25 4
gpt4 key购买 nike

我正在尝试在没有播放框架的情况下使用 sbt-web 插件,而是使用 xsbt-web-plugin 构建一个 webapp。

我已经让 sbt-web 插件在处理 Assets 管道时正常工作,并让它创建有效的 webjar 输出(通过 packageBin)以及标准的“web/public/main”输出(通过 Assets )。

另外,我一直在使用 xsbt-web-plugin 开发一个 web 应用程序并从 SBT 中为该 web 应用程序提供服务(通过 container:start)。 webapp 项目可以使用来自 mavenCentral 的 webjar 依赖项并毫无问题地引用这些资源。

我一直无法弄清楚的是如何让 xsbt-web-plugin 在 Web 应用程序中包含来自 sbt-web 管道的 Assets 。看来我能做的最好的事情就是让它们进入 CLASSPATH。 (据我所知,这就是游戏所需要的,因为他们有一个“ Assets Controller ”,可以在 CLASSPATH 之外为这些 Assets 提供服务,因此不需要它们作为 Web 应用程序的静态 Assets 可用)。

我已经创建了一个公共(public) 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(): _*)

webapp 中的 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 已成功提供,因为它来自预构建的 webjar。这三个标签都是不同的,并且尝试引用 sbt-web 的 Assets 输出失败。

我试图实现的最佳情况是将 sbt-web 插件输出 (target/web/public/main/) 包含在 xsbt-web-plugin webapp 输出 (target/webapp/)。我会满足于 xsbt-web-plugin 能够作为 webjar 访问项目依赖项。

最佳答案

如果你tell xsbt-web-plugin要使用 sbt-web 的输出作为其 Web 应用程序资源目录,它应该可以帮助您完成大部分工作。

只需添加 webappSrc in webapp <<= WebKeys.assets in Assets作为您的 example_webapp 的设置项目:

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(): _*)
.settings(webappSrc in webapp <<= WebKeys.assets in Assets)

关于sbt - 如何通过 SBT 项目依赖项将 sbt-web 输出与 xsbt-web-plugin 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29154360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com