【发布时间】:2012-11-29 21:51:11
【问题描述】:
我应该把我编译(通过 Rhino)的 Javascript 类放在哪里,以便它们
在编译期间包含在类路径中,并包含在生成的
dist捆绑?
Play Framework 2.1-RC1 + SBT 会忽略它们,有时在 编译,有时在生成 dist 包时。
1。将生成的文件放在classes/ 或classes_managed/
如果我将生成的 .class 文件放在此处或此处:target/scala-2.10/classes/
target/scala-2.10/classes_managed/
然后compile 和run 工作正常。但是stage 和dist 期间的一些奇怪的编译步骤(什么?!)失败了:它不会找到编译的类。
2。将类放在专用目录中
如果我将生成的 .class 文件放在这里:
target/scala-2.10/compiledjs-classes/
并在 SBT 的配置中添加一个类路径条目:
object ApplicationBuild extends Build {
...
def mainSettings = List(
...,
unmanagedClasspath in Compile <+= (baseDirectory) map { bd =>
Attributed.blank(bd / "target/scala-2.10/compiledjs-classes")
},
...)
然后compile、run、stage 和 dist 工作正常。然而!当我解压缩并
启动生成的 .zip 文件(通过dist 生成),然后启动应用程序
在运行时失败,因为编译的 Javascript 类不包含在
.zip。
3。将类放在 lib/ 文件夹中
然后compile 将找不到类文件。
(我放置了例如compiledjs.HtmlSanitizerJs类
lib/compiledjs/HtmlSanitizerJs.class.)
我该怎么办?我的意思是,什么是有效的,什么是最佳做法?
无论如何,现在我将生成的类复制到target/scala-2.10/compiledjs-classes/(因此编译工作)和target/scala-2.10/classes/(因此它们包含在生成的 .zip 中)
这行得通,但感觉很不对。
(( 奇怪的是,在旧版本的 Play Framework 上一切正常
(早于 RC-1)和当我使用 PlayProject 而不是 play.Project 时。
然后我只将生成的类保存在target/scala-2.10/classes/ 中。 ))
【问题讨论】:
-
您可以尝试 2. 使用不在目标中但在 baseDirectory 中的文件夹吗?
-
@Schleichardt 完成。编译有效,但
stage和dist不起作用(因为java.lang.NoClassDefFoundError,当找不到生成的类时)。 -
而且,在 SBT 中,
classpath命令不会列出 the-folder-that-is-not-in-target-but-in-the-baseDirectory ,即在我的情况下compiledjs-classes。但是,show full-classpath确实 列出了该文件夹compiledjs-classes。所以我所做的似乎是告诉 SBT 仅在编译时包含该文件夹,而不是在生成 dist 时包含该文件夹? -
在 SBT 中,
clean不会删除compiledjs-classes文件夹。 -
对于清洁问题,有一个解决方案:stackoverflow.com/questions/10471596/…
标签: playframework sbt rhino playframework-2.1