我正在使用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
?
答案 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项目保留在外。