【问题标题】:Activator UI: importing a non sbt project or adding a JAVA_MODULE to the rootActivator UI:导入非 sbt 项目或将 JAVA_MODULE 添加到根目录
【发布时间】:2016-12-23 02:06:52
【问题描述】:

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

|_**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

【问题讨论】:

    标签: sbt typesafe-activator


    【解决方案1】:

    您需要做的是使用 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 项目排除在外。

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 2015-03-30
      • 2013-05-28
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多