我是Typesafe Activator的新手,正在尝试创建一个子项目关系的Play项目。
我使用activator
进行本地开发,使用sbt
进行Heroku。它的版本是0.13.5。
当我从sbt clean stage
项目的基本目录中键入root
时,它会调用子模块并在<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
的{{1}}文件的类似内容:
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"
命令为子项目生成包含类文件的jar文件?
答案 0 :(得分:0)
我的猜测是将顶级index_worker
中的build.sbt
项目声明更改为enablePlugins PlayScala
明确:
lazy val index_worker = (project in file("index_worker")) settings (
name := "perf-catalog-index-worker",
mainClass := Some("org.myorg.catalog.index.CatalogIndexWorker")
) enablePlugins PlayScala
原因是您有两个独立的Play项目 - index_worker
和root
。虽然index_worker
是一个完整的Play项目,但整个project
构建定义不被选中,因为只有最高级别的(#sbt如何工作)。
但我无法弄清楚为什么stage
在子模块中执行。 我可能弄错了。