【问题标题】:Unable to get sbt-rjs plugin imported in play application无法在播放应用程序中导入 sbt-rjs 插件
【发布时间】:2016-11-28 14:08:23
【问题描述】:

我想在我的基于 play framework 2.5 的 java 应用程序中连接 JavaScript 文件。

plugins.sbt,我添加了以下代码:

addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.8")

我还补充了:

resolvers += Resolver.url("SBT Plugins", url("https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)

resolvers += Resolver.url("bintray-sbt-plugins", url("https://dl.bintray.com/sbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)

Build.scala我已经添加:

pipelineStages := Seq(rjs)

当我运行>activator clean dist 时,我得到:

"rjs is undefined"

我尝试添加:

import com.typesafe.sbt.rjs.Import._

但是com.typesafe.sbt中没有rjs包。

构建.scala

import play.PlayScala
import sbt._
import Keys._
import play.Play.autoImport._
import com.typesafe.sbt._
import com.typesafe.sbt.web.SbtWeb
import de.johoop.jacoco4sbt.JacocoPlugin._
import com.typesafe.sbt.web.Import.pipelineStages

object ApplicationBuild extends Build {

    def fromEnv(name: String) = System.getenv(name) match {
       case null => None
       case value => Some(value)
    }

    val appName = fromEnv("artifactId").getOrElse("BMT")
    val appVersion = fromEnv("version").getOrElse("1.2-SNAPSHOT")

    pipelineStages := Seq(rjs)

    val appDependencies = Seq(
        javaJdbc,
        javaCore,
        javaJpa,
        javaWs,
        cache,
        javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
        "org.hibernate" % "hibernate-entitymanager" % "4.3.5.Final",
        "org.mockito" % "mockito-all" % "1.9.5" % "test",
        "org.apache.poi" % "poi" % "3.9",
        "org.apache.poi" % "poi-ooxml" % "3.9",
        "org.json" % "json" % "20090211",
        "commons-codec" % "commons-codec" % "1.9",
        "org.apache.directory.api" % "api-all" % "1.0.0-M33" exclude("org.apache.directory.api", "api-ldap-schema-data"),
        "org.apache.directory.server" % "apacheds-server-annotations" % "2.0.0-M15" % "test" exclude("org.apache.directory.api", "api-ldap-schema-data"),
        "org.apache.directory.server" % "apacheds-test-framework" % "2.0.0-M15" % "test" exclude("org.apache.directory.api", "api-ldap-schema-data"),
        "com.microsoft.windowsazure" % "microsoft-windowsazure-api" % "0.4.6"
    )

    val main = Project(appName, file(".")).enablePlugins(play.PlayJava,SbtWeb).settings(
        version := appVersion,
        libraryDependencies ++= appDependencies
    )
}

我所知道的是如何在应用程序中安装 sbt-rjs 插件。

【问题讨论】:

  • 你能分享你的Build.scala文件吗?
  • 我已将 build.scala 添加到帖子中

标签: scala playframework sbt sbt-web sbt-rjs


【解决方案1】:

您的Build.scala 项目存在不止一个问题:

进口

您有不存在的导入,例如:

import play.PlayScala
// the correct import is play.sbt.PlayScala

import play.Play.autoImport._
// the correct import is play.sbt.Play.autoImport._

还有,我认为这会在您的报告中产生问题:

import com.typesafe.sbt._

这里的问题是rjscom.typesafe.sbt 的子包,然后在Build.scala 中使用rjs 实际上引用的是包而不是您想要的配置。将上面的导入替换为:

import com.typesafe.sbt.rjs.SbtRjs.autoImport._

然后它将正确引用rjs 管道阶段。

配置错误

你有:

enablePlugins(play.PlayJava,SbtWeb)

但是play.PlayJava 不存在。正确的行是:

enablePlugins(play.sbt.PlayJava, SbtWeb)

为什么不改用build.sbt。您的构建没有什么特别之处,build.sbt 会更简单:

lazy val root = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
  javaJdbc,
  javaCore,
  javaJpa,
  javaWs,
  cache,
  javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
  "org.hibernate" % "hibernate-entitymanager" % "4.3.5.Final",
  "org.mockito" % "mockito-all" % "1.9.5" % "test",
  "org.apache.poi" % "poi" % "3.9",
  "org.apache.poi" % "poi-ooxml" % "3.9",
  "org.json" % "json" % "20090211",
  "commons-codec" % "commons-codec" % "1.9",
  "org.apache.directory.api" % "api-all" % "1.0.0-M33" exclude("org.apache.directory.api", "api-ldap-schema-data"),
  "org.apache.directory.server" % "apacheds-server-annotations" % "2.0.0-M15" % "test" exclude("org.apache.directory.api", "api-ldap-schema-data"),
  "org.apache.directory.server" % "apacheds-test-framework" % "2.0.0-M15" % "test" exclude("org.apache.directory.api", "api-ldap-schema-data"),
  "com.microsoft.windowsazure" % "microsoft-windowsazure-api" % "0.4.6"
)

pipelineStages := Seq(rjs)

def fromEnv(name: String) = System.getenv(name) match {
  case null => None
  case value => Some(value)
}

name := fromEnv("artifactId").getOrElse("BMT")

version := fromEnv("artifactId").getOrElse("BMT")

【讨论】:

  • 我没有正在播放的 sbt 包。如果我使用 play.sbt.PlayScala 我得到 play.sbt 是未定义的。同样,如果我使用 import com.typesafe.sbt.rjs.SbtRjs.autoImport._ 我得到 rjs is undefined in com.typesafe.sbt.rjs
  • 然后发布您的整个plugin.sbt 文件。如果你没有这些包,那么你可能没有添加 play sbt 插件。
  • 在某些时候(2.2?2.3?我不记得了)Play 插件从使用play 包转移到使用play.sbt。我假设@user1184100 使用的是旧版本的 Play。查看 plugins.sbt 的内容会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2015-04-08
  • 2012-12-31
  • 2017-10-24
  • 1970-01-01
相关资源
最近更新 更多