Activator UI:导入非sbt项目或向根添加JAVA_MODULE

时间:2016-08-16 15:49:24

标签: sbt typesafe-activator

我正在使用Activator,我想导入一个具有一个Play模块(模块A)的现有X-Y Java项目。它有这棵树:

|_**A**
  |_app
    |_view
    |_controller
    |_filters
    |_jobs
    |_services
    |_jobs
    |_services
  |_conf
  |_lib
  |_logs
  |_target
  |_project
  |_public
  |_test
  |_**build.sbt**
|_**web.server**
  |_htmlpages
  |_view
  |_model
  |_node_modules
  |_routes
  |_**app.js**
  |_db.js
  |_global.js
  |_**package.json**
|_**B**
  |_out
  |_src
  |_**B.iml**
|_**C**
  |_out
  |_src
  |_**C.iml**

A唯一的组件是build.sbt。其他组件都是Java,除了最后一个nodeJS

如果我尝试使用所有组件导入整个项目,Activator UI会显示以下错误:

X-Y doesn't contain a valid sbt project

如果我只导入模块A,它导入正常,但构建项目会显示一个错误列表,其中一个错误,从stdout读取:

C:\Users\me\X\A\app\controllers\xyzController.java:3: package X.Y.C does not exist

知道如何使用所有组件导入整个项目,或者如何将所有其他组件添加到已导入的sbt组件A

1 个答案:

答案 0 :(得分:0)

您需要做的是使用SBT' multi-project build。具体而言,您需要为要构建到最终项目中的每个模块创建一个项目。实际上,这意味着您需要在根目录中有一个build.sbt文件,在该目录下存在所有其他模块。 (请注意,有些项目不在JVM上,这很好。)

您的目录结构如下所示:

/root-project-name
  /moduleA
    /src
      /app
        /controller
        /filter
        /... (all module A app files)
  /moduleB
    /src
      / ... (all module B files)
  /moduleC
    /src
      / ... (all module C files)
  /build.sbt

build.sbt中,您将分别声明每个项目:

 lazy val moduleA = (project in file("moduleA")).dependsOn(moduleB)

 lazy val moduleB = (project in file("moduleB"))

dependsOn子句允许moduleA引用moduleB。您只需为计划使用SBT构建的任何模块创建project变量 - 例如,您可以将Javascript项目保留在外。