为什么多模块项目构建为具有阶段的子模块生成空的jar文件?

时间:2014-10-23 23:33:48

标签: playframework sbt typesafe-activator

我是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文件?

1 个答案:

答案 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_workerroot。虽然index_worker是一个完整的Play项目,但整个project构建定义被选中,因为只有最高级别的(#sbt如何工作)。

但我无法弄清楚为什么stage在子模块中执行。 我可能弄错了。