【问题标题】:Jetty-webapp unknown artifact in sbtsbt 中的 Jetty-webapp 未知工件
【发布时间】:2018-02-11 01:18:34
【问题描述】:

我创建了 Scalatara 应用程序来构建 Web 服务。它使用 Jetty 服务器,并且在我创建项目本身时包含在 build.sbt 文件中。

但是当我尝试使用命令 - jetty:start 启动码头服务器时,它会显示一条错误消息 “not a valid key: jetty”。然后,当我检查构建文件时,它显示警告消息为 "unknown artifact in sbt" 用于以下依赖项。

“org.eclipse.jetty”%“jetty-webapp”%“9.4.6.v20170531”%“容器”

我使用了 MVN 存储库中的最新依赖项,但仍然显示相同的错误。在这里我还有什么需要做的吗?

【问题讨论】:

    标签: scala sbt jetty scalatra scalatra-sbt


    【解决方案1】:

    您是如何创建项目的?有没有办法告诉我,以便我可以重现它。会更容易弄清楚。无论如何,您可以尝试先将解析器添加到您的 build.sbt 中:

    resolvers += "Jetty" at "https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-webapp"

    【讨论】:

    • 我使用 Scalatra 官网给出的命令 'sbt new scalatra/scalatra-sbt.g8' 创建:scalatra.org/getting-started/first-project.html
    • 我添加了解析器,但它仍然显示相同的警告。解析器 ++= Seq(Classpaths.typesafeReleases, "Jetty" at "mvnrepository.com/artifact/org.eclipse.jetty/jetty-webapp")
    • 当我再次构建 sbt 时,问题突然得到解决。相信我,我尝试了很多次,但以前没有用。但是,当我运行命令 jetty:start 时,它仍然向我显示一条错误消息“not a valid key: jetty”。
    • 好的。惊人的!恭喜
    【解决方案2】:

    请比较下面显示的 build.sbt 文件的代码,如果有任何遗漏,您应该在 build.st 文件中更新。

    import org.scalatra.sbt._
    import org.scalatra.sbt.PluginKeys._
    import ScalateKeys._
    
    val ScalatraVersion = "2.5.1"
    
    ScalatraPlugin.scalatraSettings
    
    scalateSettings
    
    organization := "com.github.karthikeyana"
    
    name := "My Scalatra Web App"
    
    version := "0.1.0-SNAPSHOT"
    
    scalaVersion := "2.12.3"
    
    resolvers += Classpaths.typesafeReleases
    
    libraryDependencies ++= Seq(
      "org.scalatra" %% "scalatra" % ScalatraVersion,
      "org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
      "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
      "ch.qos.logback" % "logback-classic" % "1.1.5" % "runtime",
      "org.eclipse.jetty" % "jetty-webapp" % "9.2.15.v20160210" % "container",
      "javax.servlet" % "javax.servlet-api" % "3.1.0" % "provided",
      "org.mongodb" %% "casbah" % "3.1.1"
    )
    
    scalateTemplateConfig in Compile := {
      val base = (sourceDirectory in Compile).value
      Seq(
        TemplateConfig(
          base / "webapp" / "WEB-INF" / "templates",
          Seq.empty,  /* default imports should be added here */
          Seq(
            Binding("context", "_root_.org.scalatra.scalate.ScalatraRenderContext", importMembers = true, isImplicit = true)
          ),  /* add extra bindings here */
          Some("templates")
        )
      )
    }
    
    enablePlugins(JettyPlugin)
    

    【讨论】:

    • 除了组织、名称和 mongodb 依赖项之外的所有内容都匹配。我希望这些变化在这种情况下无关紧要。我也收到了同样的 logback 依赖警告。我没有在问题中提到它,因为当我使用不同的依赖项时它开始工作。
    • 当我再次构建 sbt 时,问题突然得到解决。相信我,我尝试了很多次,但以前没有用。但是,当我运行命令 jetty:start 时,它仍然向我显示一条错误消息“not a valid key: jetty”。