sbt:子项目的动态聚合

2023-11-22

我想发明一个系统动态发现子项目并将它们自动聚合到我的项目中。或者至少以某种方式配置它。

为此,我计划拥有一个“模块”文件夹或包含模块路径的可选配置文件。

无论如何我需要循环遍历子文件夹(或循环遍历配置文件中的路径列表),并汇总每个子项目。我不知道该怎么做。

目前我正在 Play 框架中构建build.sbt文件。我需要添加这样的循环:

name := "mysite"
version := "1.0"
scalaVersion := "2.11.1"
lazy val root = (project in file(".")).enablePlugins(PlayJava)
//pseudocode:
foreach( folder in the 'modules' folder) { 
  lazy val module = (project in file(folder)).enablePlugins(PlayJava)
  root = root.dependsOn(module).aggregate(module)
}

有没有办法做到这一点?

编辑3: 这里的代码几乎可以工作:

object MyBuild extends Build {
  name := "mysite"
  version := "1.0"
  scalaVersion := "2.11.6"

  var m = new File("modules")
  var list = Seq[ProjectReference]()
  var deps = Seq[ClasspathDependency]()
  if (m.exists) {
    val subs = m.listFiles.filter ( _.isDirectory ).foreach { folder =>
      var modulePath = new File("modules", folder.getName)
      println("Found module " + modulePath)
      lazy val module:ProjectRef = ProjectRef(modulePath,folder.getName)
      lazy val dep:ClasspathDependency = ClasspathDependency(module, None)
      list = list :+ module
      deps = deps :+ dep
    }
  }

  lazy val root = Project(id = "mysite", base = file(".")).enablePlugins(PlayJava).aggregate(list:_*).dependsOn(deps:_*)
}

Edit 4:

请参阅下面 Dale Wijnand 的解决方案。

关于错误:RuntimeException: No project 'myModule' in 'file:/Users/me/mysite/modules/myModule'。我使用以下解决方案解决了这个问题https://stackoverflow.com/a/28820578


Here:

项目/Build.scala

import sbt._
import sbt.Keys._

import play.sbt._
import play.sbt.Play.autoImport._

object Build extends Build {
  val commonSettings: Seq[Setting[_]] = Seq(
    scalaVersion := "2.11.7"
  )

  lazy val modules = (file("modules") * DirectoryFilter).get.map { dir =>
    Project(dir.getName, dir).enablePlugins(PlayJava).settings(commonSettings: _*)
  }

  lazy val root = (project in file("."))
    .enablePlugins(PlayJava)
    .settings(
      name := "mysite",
      version := "1.0"
    )
    .settings(commonSettings: _*)
    .dependsOn(modules map (m => m: ClasspathDependency): _*)
    .aggregate(modules map (m => m: ProjectReference): _*)

  override lazy val projects = root +: modules
}

注意,确保模块目录不包含build.sbt将它们定义为项目的文件,因为这会导致混乱RuntimeException: No project 'x' in 'file:/x'类型异常,请参阅无法将 sbt 0.13.7 与 Play 子项目一起使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sbt:子项目的动态聚合 的相关文章

随机推荐

  • UICollectionView 滚动很慢

    我刚刚创建了一个UICollectionView其中用户可以将手机中的图像添加到应用程序的相册功能中 我将图像保存到文档目录中的子目录中 以便可以添加和删除更多图像 但是 当我上下滚动集合视图时 它非常滞后 怎样才能让滚动条又漂亮又流畅呢
  • “点击恢复”暂停文本 SpriteKit

    我知道 SpriteKit 已经处理了当应用程序进入非活动状态时暂停游戏的问题 但我想做的是在应用程序重新进入活动状态时添加一个 SKLabelNode 点击恢复 现在它正在正确调用我的函数并暂停游戏 但文本没有显示 AppDelegate
  • 具有多个自变量的 Python curve_fit

    蟒蛇的curve fit计算具有单个自变量的函数的最佳拟合参数 但是有没有办法使用curve fit或者其他什么 以适应具有多个自变量的函数 例如 def func x y a b c return log a b log x c log
  • 如何检测实体 EntityState 的更改?

    我想在客户列表的每一行上放置一个 删除 按钮和一个 取消 按钮 当客户 未更改 时 取消 按钮将被禁用 但是 当客户转换到更改状态 已添加 已修改 已删除 时 我想启用 取消 按钮 以便用户可以在保存之前撤消更改 无论它们是什么 我几乎可以
  • 如何防止 PHP DOMDocument“修复”您的 HTML 字符串

    我一直在尝试使用 HTML DOM 对象来解析网页 以便将它们用于应用程序来扫描它们的 SEO 质量 但是我遇到了一些问题 出于测试目的 我编写了一个小型 HTML 页面 其中包含以下不正确的 HTML 正如您所看到的 标题位于 head
  • EF Core 多个导航属性产生循环依赖

    我有以下映射配置 入门级 entity HasOne e gt e CurrentHandling WithOne HasForeignKey
  • Django 多处理和数据库连接

    背景 我正在开发一个使用 Django 和 Postgres 数据库的项目 我们还使用 mod wsgi 以防万一 因为我的一些网络搜索提到了它 在提交 Web 表单时 Django 视图启动一项需要花费大量时间 超过用户想要等待的时间 的
  • 当我们创建空的不可变列表/集合/映射时,是否有任何实际应用/用例

    Java 9 提供了一种创建空不可变列表 集合和映射的方法 List list List of Set set Set of Map map Map of 但我无法理解创建空的不可变列表 集合 映射的实际用例是什么 请帮助我理解空的不可变列
  • 如何在 Zend Framework 2 中引导会话

    在 Zend Framework 2 中启动和运行会话的最佳方法是什么 我尝试过设置session start 在我的 index php 文件中 但随后在引导任何自动加载器之前运行该文件 导致我的会话中存在不完整的对象 在 ZF1 中 您
  • C# - 如何打印宽高比/整页

    我正在单击按钮时打印图表控件 chart1 SaveImage ms ChartImageFormat Bmp Bitmap bm new Bitmap ms PrintDocument doc new PrintDocument doc
  • 如何覆盖 setup.py 默认使用的编译器 (GCC) 标志?

    我明白那个setup py使用相同的CFLAGS用于构建 Python 我有一个我们的 C 扩展存在段错误 我需要构建它without O2因为 O2正在优化一些值和代码 以便核心文件不足以确定问题 我只需要修改setup py以便 O2未
  • 如何从 Java 中的 URL 读取图像?

    我的 Web 应用程序中有提供图像的 servlet 当我使用浏览器图像访问这些 url 时 服务器是正确的 然后我有另一个调整图像大小的 servlet 想法是通过调整大小 servlet 中的 url 访问获取图像 然后调整图像大小 但
  • 最佳实践 - 使用 Symfony 2 删除链接

    在 Symfony 2 中 创建删除记录的链接的最佳方法是什么 我可以定义一条路线 entity delete只接受一个DELETE方法 但我不知道如何创建DELETE来自模板的链接 创建也是同样的道理PUT links 所以你会怎么做 接
  • 如何找到循环图中两个节点之间的最长路径?

    我已经解决了大部分发布的问题here 除了最长的路径之外的所有路径 我读过关于最长路径的维基百科文章 如果图是非循环的 这似乎很容易出现问题 而我的不是 那我该如何解决这个问题呢 通过检查所有可能的路径进行暴力破解 我该如何开始这样做呢 我
  • Microsoft SQL Server“Express”版本可以免费开发吗?

    我可以在 Microsoft SQL Server 2005 2008 Express 版数据库上免费开发软件吗 是的你可以 但 Express 版本有一些限制 SQL Server 一次仅使用一个 CPU 最大内存为1GB 数据库大小限制
  • 为什么 C++ 编译器不优化结构数据成员的读写而不是不同的局部变量?

    我正在尝试创建一些 POD 值的本地数组 例如double 与固定max size在编译时已知 然后读取运行时size value size lt max size 并首先处理size该数组中的元素 问题是 为什么编译器不消除堆栈读写arr
  • Java 位图字体:用不同颜色位图传输 1 位图像

    我想在基于 Java AWT 的应用程序中实现一个简单的位图字体绘制 应用程序借鉴了Graphics对象 我想在其中实现一个简单的算法 1 加载文件 可能使用ImageIO read new File fileName 这是 1 位 PNG
  • 为什么 UserManager.CreateIdentityAsync() 正在寻找 IdentityRole 以及如何修复?

    我在用着身份2 0 with MVC5 代码优先我已经延长了IdentityUser and IdentityRole像这样 public class ApplicationUser IdentityUser Required String
  • 键盘可访问的网络下拉菜单?

    有没有办法在网站上构建键盘可访问的下拉菜单 我们当前的 Web 应用程序具有标准的悬停菜单 但这确实减慢了我们的数据输入职员的速度 他们习惯于桌面应用程序 其中有键盘可访问的菜单 无需使用鼠标 我们弄清楚了如何使用键盘快捷键显示菜单 但我不
  • sbt:子项目的动态聚合

    我想发明一个系统动态发现子项目并将它们自动聚合到我的项目中 或者至少以某种方式配置它 为此 我计划拥有一个 模块 文件夹或包含模块路径的可选配置文件 无论如何我需要循环遍历子文件夹 或循环遍历配置文件中的路径列表 并汇总每个子项目 我不知道