【发布时间】:2014-10-23 23:33:48
【问题描述】:
我是 Typesafe Activator 的新手,正在尝试创建一个具有子项目关系的 Play 项目。
我在本地开发中使用activator,在 Heroku 上使用sbt。这是 sbt 版本 0.13.5。
当我从root 项目的基本目录中键入sbt clean stage 时,它会调用子模块并在<parent_dir>/<sub_project_dir>/universal/stage/lib 下的适当位置生成一个jar 文件。
问题是jar文件只有META-INF/MANIFEST.MF文件,里面没有其他文件,包括类文件。
当我使用 activator clean stage 从子模块的基目录构建子模块时,会创建包含所有正确类文件的 jar 文件。
这是顶级项目build.sbt 的内容(减去库依赖项和repo 解析器):
import play.PlayScala
name := "perf-catalog-index"
version := "1.0"
lazy val index_worker=(project in file("index_worker")) settings (
name:="perf-catalog-index-worker",
mainClass:=Some("org.myorg.catalog.index.CatalogIndexWorker")
)
lazy val root = (project in file(".")) enablePlugins(PlayScala) aggregate(index_worker)
aggregate in Global := true
scalaVersion := "2.11.1"
这里是我的子项目index_worker的build.sbt文件的类似内容:
import play.PlayScala
name := "perf-catalog-index-worker"
version := "1.0"
lazy val root = (project in file(".")) enablePlugins(PlayScala)
// Setup the packager
packageArchetype.java_application
// Enable JAR export for staging
exportJars := true
val workerMainClass = Some("org.myorg.catalog.index.CatalogIndexWorker")
mainClass in (Compile, run) := workerMainClass
mainClass in (Compile, packageBin) := workerMainClass
scalaVersion := "2.11.1"
如何获取stage 命令为包含类文件的子项目生成jar 文件?
【问题讨论】:
-
这需要一些时间来找出问题所在,所以您介意将项目发布到 github 上进行调查吗?
-
我不确定我是否可以发布整个内容。这是我公司私人 github 存储库的一部分。不过我会看看有什么可能。
-
只需发布您自己的副本,用于在更小、更受控制的“环境”中重现问题 - 您在此处提出问题之前确实创建了一个副本,不是吗?
-
顺便说一句,为什么你使用
sbt和activator而单独使用activator就足够了?为什么要打扰sbt?! -
我在本地工作中使用 activator,因为我正在使用 play 框架进行开发。当发布到 heroku 时,我们在那里使用标准的 sbt 构建包,我假设它正在使用 sbt 来完成它的工作。我试图确保这两种方法的行为相同,以确保 Heroku 可以正确构建它。在父级使用激活器也会产生与 sbt 相同的结果(空 jar 文件)。
标签: playframework sbt typesafe-activator