首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >place在哪里为SBT和Play Framework2.1编译了Javascript类文件以找到它们?

place在哪里为SBT和Play Framework2.1编译了Javascript类文件以找到它们?
EN

Stack Overflow用户
提问于 2012-12-12 08:23:21
回答 1查看 998关注 0票数 1

我应该将已编译的(通过Rhino) Javascript类放在哪里,以便在编译期间将它们包含在类路径中,并包含在生成的dist包中?

Play Framework2.1-RC1+ SBT忽略它们,有时在编译期间,有时在生成dist包时。

1.将生成的文件放置在classes/classes_managed/

如果我将生成的.class文件放置在这里或这里:

target/scala-2.10/classes/ target/scala-2.10/classes_managed/

然后compilerun工作得很好。但是一些奇怪的编译步骤(什么?!)在stagedist失败期间:它找不到编译过的类。

2.将类放在专用目录中

如果我将生成的.class文件放在这里:target/scala-2.10/compiledjs-classes/

并向SBT的配置中添加一个类路径条目:

代码语言:javascript
复制
object ApplicationBuild extends Build {
  ...
  def mainSettings = List(
    ...,
    unmanagedClasspath in Compile <+= (baseDirectory) map { bd =>
      Attributed.blank(bd / "target/scala-2.10/compiledjs-classes")
    },
    ...)

然后compilerunstagedist工作得很好。不过!当我解压缩并启动生成的.zip文件(通过dist生成)时,应用程序在运行时失败,因为编译的Javascript类不包含在.zip中。

3.在lib/文件夹中放置类

那么compile将找不到类文件。(我将例如compiledjs.HtmlSanitizerJs类放在lib/compiledjs/HtmlSanitizerJs.class中。)

我该怎么做?我的意思是,什么是有效的和最佳的做法?

无论如何,现在我正在将生成的类复制到两个

target/scala-2.10/compiledjs-classes/ (so编译作品)和

target/scala-2.10/classes/ (因此它们包含在生成的.zip中)

这很管用,但感觉很不对劲。

(奇怪的是,在使用较早版本的Play Framework (比RC-1更早)和我使用PlayProject而不是play.Project时,一切都很好。然后,我只将生成的类保存在target/scala-2.10/classes/中。))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-17 19:45:04

我找不到办法把类文件放到舞台上的罐子里。作为解决办法,我在舞台上生成一个JAR文件,在播放运行时,我将类路径设置为基本文件夹中的“犀牛”文件夹。

我为您创建了一个gist,所以您可以检查它并尝试:https://gist.github.com/4321216犀牛/ so /Exprese.class表示一个Rhino类,但它只是一个返回字符串的类。

添加您的Build.scala:

代码语言:javascript
复制
  val rhinoJarName = "rhino.jar"
  val folderForRhinoJar = unmanagedBase
  val rhinoClasspath = (baseDirectory) map { base => Attributed.blank(base / "rhino")}
  val rhinoClassesToJar = TaskKey[Unit]("rhino-classes-to-jar")
  val rhinoClassesToJarInitializer = (base: File, folderForJar: File) => {
    val rhinoFolder = new File(base, "rhino")
    val isClassFile = (file: File) => file.getName.endsWith("class")
    val classFiles =  rhinoFolder.***.filter(isClassFile).get
    val sources = classFiles map { file =>
      file -> file.getCanonicalPath.drop(rhinoFolder.getCanonicalPath.length + 1)
    }
    IO.jar(sources, folderForJar / rhinoJarName, new java.util.jar.Manifest())
  }

  val main = play.Project(appName, appVersion, appDependencies).settings(
    unmanagedClasspath in Compile <+= rhinoClasspath,
    unmanagedClasspath in Runtime <+= rhinoClasspath,
    rhinoClassesToJar <<= (baseDirectory, folderForRhinoJar) map rhinoClassesToJarInitializer,
    playStage <<= playStage.dependsOn(rhinoClassesToJar),
    playStage <<= (playStage, folderForRhinoJar) map {(unused, folder) =>
      IO.delete(folder / rhinoJarName)
    },
    cleanFiles <+= folderForRhinoJar { _ / rhinoJarName } //make sure jar will be deleted if play stage does not finish and cleanup jar
  )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13835581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档