Playframework 将SBT和Play Framework 2.1编译的Javascript类文件放在哪里可以找到它们?
我应该把我编译的(通过Rhino)Javascript类放在哪里,以便它们被保存 编译期间包含在类路径上,并包含在生成的Playframework 将SBT和Play Framework 2.1编译的Javascript类文件放在哪里可以找到它们?,playframework,sbt,rhino,playframework-2.1,Playframework,Sbt,Rhino,Playframework 2.1,我应该把我编译的(通过Rhino)Javascript类放在哪里,以便它们被保存 编译期间包含在类路径上,并包含在生成的 distbundle Play Framework 2.1-RC1+SBT会忽略它们,有时在 编译,有时在生成dist bundle时 1.将生成的文件放入classes/或classes\u managed/ 如果将生成的.class文件放在此处或此处: target/scala-2.10/classes/ target/scala-2.10/classes\u manag
dist
bundle
Play Framework 2.1-RC1+SBT会忽略它们,有时在
编译,有时在生成dist bundle时
1.将生成的文件放入classes/
或classes\u managed/
如果将生成的.class文件放在此处或此处:target/scala-2.10/classes/
target/scala-2.10/classes\u managed/
然后编译
和运行
工作正常。但是stage
和dist
期间的一些奇怪的编译步骤(什么?!)失败了:它找不到已编译的类
2.将类放置在专用目录中
如果我将生成的.class文件放在此处:
target/scala-2.10/compiledjs类/
并将类路径条目添加到SBT的配置中:
object ApplicationBuild extends Build {
...
def mainSettings = List(
...,
unmanagedClasspath in Compile <+= (baseDirectory) map { bd =>
Attributed.blank(bd / "target/scala-2.10/compiledjs-classes")
},
...)
对象应用程序构建扩展了构建{
...
def main设置=列表(
...,
编译中的非托管类路径
Attributed.blank(bd/“target/scala-2.10/compiledjs类”)
},
...)
然后编译
,运行
,阶段
和dist
工作正常。然而!当我解开拉链
启动生成的.zip文件(通过dist
生成),然后启动应用程序
运行时失败,因为编译的Javascript类未包含在
拉链
3.在lib/文件夹中放置类
然后,compile
将找不到类文件。
(例如,我将classcompiledjs.HtmlSanitizerJs
放在
lib/compiledjs/HtmlSanitizerJs.class
)
我该怎么办?我的意思是,什么有效,什么是最佳实践 无论如何,现在我正在将生成的类复制到这两个
target/scala-2.10/compiledjs类/
(因此编译工作正常)和target/scala-2.10/classes/
(因此它们包含在生成的.zip中)这是可行的,但感觉非常错误 ((奇怪的是,在较旧版本的Play Framework中,一切正常。) (早于RC-1)并且当我使用PlayProject而不是play.Project时。
然后,我将生成的类保存在
target/scala-2.10/classes/
)中。我找不到将类文件放入stage任务的jar中的方法。作为一种解决方法,我在舞台上生成一个JAR文件,在播放运行时,我将类路径设置为基本文件夹中的“rhino”文件夹
我为您创建了一个要点,所以您可以查看并尝试:rhino/so/Example.class表示一个rhino类,但它只是一个返回字符串的Java类
在Build.scala中添加:
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
)
val rhinoJarName=“rhino.jar”
val folderForRhinoJar=非托管数据库
val rhinoClasspath=(baseDirectory)映射{base=>Attributed.blank(base/“rhino”)}
val rhinoClassesToJar=TaskKey[Unit](“rhino类到jar”)
val rhinoclassestojar初始值设定项=(base:File,folderForJar:File)=>{
val rhinoFolder=新文件(基,“rhino”)
val isClassFile=(file:file)=>file.getName.endsWith(“类”)
val classFiles=rhinoFolder.**.filter(isClassFile.get)
val sources=classFiles映射{file=>
文件->文件.getCanonicalPath.drop(rhinoFolder.getCanonicalPath.length+1)
}
jar(sources,folderForJar/rhinoJarName,new java.util.jar.Manifest())
}
val main=play.Project(appName、appVersion、appDependencies)。设置(
编译中的unmanagedClasspath我找不到将类文件放入stage任务中的JAR的方法。作为一种解决方法,我在stage和play运行时生成一个JAR文件,我将类路径设置为基本文件夹中的“rhino”文件夹
我为您创建了一个要点,所以您可以查看并尝试:rhino/so/Example.class表示一个rhino类,但它只是一个返回字符串的Java类
在Build.scala中添加:
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
)
val rhinoJarName=“rhino.jar”
val folderForRhinoJar=非托管数据库
val rhinoClasspath=(baseDirectory)映射{base=>Attributed.blank(base/“rhino”)}
val rhinoClassesToJar=TaskKey[Unit](“rhino类到jar”)
val rhinoclassestojar初始值设定项=(base:File,folderForJar:File)=>{
val rhinoFolder=新文件(基,“rhino”)
val isClassFile=(file:file)=>file.getName.endsWith(“类”)
val classFiles=rhinoFolder.**.filter(isClassFile.get)
val sources=classFiles映射{file=>
文件->文件.getCanonicalPath.drop(rhinoFolder.getCanonicalPath.length+1)
}
jar(sources,folderForJar/rhinoJarName,new java.util.jar.Manifest())
}
val main=play.Project(appName、appVersion、appDependencies)。设置(
编译中的unmanagedClasspath您可以尝试2.使用不在目标中但在baseDirectory中的文件夹吗?@Schleichardt完成。编译工作,但stage
和dist
不工作(因为当找不到生成的类时,java.lang.NoClassDefFoundError
)。并且,在SBT中,classpath
命令没有列出不在目标中但在baseDirectory中的文件夹,在我的例子中,即compiledjs类
。但是,show full classpath
确实列出了该文件夹,compiledjs类
。因此,我所做的似乎是告诉SBT在编译时包括该文件夹仅,但不是在生成dist时?在SBT中,clean
不会删除compiledjs classes
文件夹。对于clean问题,存在一个解决方案:可以尝试2.使用不在目标中但在baseDirectory中的文件夹吗?@Schleichardt Done。编译工作正常,但stage
和dist
不工作(因为java.lang.NoClassDefFoundError
,当找不到生成的类时)。并且,在SBT中,classpath
命令没有列出不在目标中但在baseDirectory中的文件夹,在我的例子中,即compiledjs类
。Howev