我使用SBT构建了一个纯java项目。该项目由多个模块组成,projectB依赖于projectA。现在,在切换到JDK 11后,这种依赖关系不应通过类路径建模,而应通过模块路径建模。是否可以告诉SBT模块依赖性必须通过模块路径而不是类路径来解决?基本上我已经设置了一个(sbt-)模块间依赖关系,它说projB.dependsOn(projA)- 那么我可以告诉SBT以某种方式将此依赖关系放在 javac模块路径上而不是使用类路径吗?我认为目前没有办法做到这一点。
编辑:进一步分析表明,我还需要使用正常的库依赖项(来自 Nexus 存储库上的库)作为模块依赖项。所以下一个问题是 - 如何将这些库依赖项视为SBT中的模块依赖项?
我确实知道SBT是一个scala构建工具,并且将它用于纯 java 项目有些牵强,但我将SBT用于其他(scala-)项目,并且我不想介绍太多不同的构建工具,直到我真的必须这样做。那么,有没有 sbt 级别的解决方案呢?
编辑:为了澄清这个问题 - 有问题的项目是我们修改的一种开源库。SBT 构建文件来自我们的组织,所以我必须维护它。该项目切换为使用 module-info 类,并且它通过模块路径依赖于其他(仅限二进制)库,也就是说,如果您在编译中包含 module-info.java 。
因此,在我们的 SBT 构建中,我必须使用某些外部库依赖项的模块路径。此外,SBT 子项目相互依赖,即我们还必须使用模块路径。有没有办法告诉 SBT:
这就是问题的核心。我也许可以为第一个问题编写一个插件(例如,没有库依赖性,而是模块化库依赖性) - 但我还不知道如何处理第二部分(告诉项目项目依赖性必须位于模块路径上并且不在类路径上)。
我正在学习scala,有一次我想根据值(而不是键)从地图中删除条目.我还想知道删除了多少条目 - 我的程序期望只删除一个条目.按值删除条目可以通过应用filterNot来完成,但是 - 如何验证是否删除了一个条目?
到目前为止,我看到实现这一目标的唯一方法是运行谓词两次 - 一次用于"count"方法(计算谓词匹配的频率),然后使用filterNot实际删除条目.
什么是Scala一次实现这一目标的方式?
我发现的唯一其他解决方案是首先使用filter(...)来获取要删除的值,然后使用" - "按键来抛出元素 - 但同样,这需要两次运行.
我正在为 C# 桌面应用程序(不是服务器,而是桌面 GUI 应用程序)编写插件。为了使我们的线程问题更简单,我正在研究是否可以在这些插件中使用 AKKA.NET。插件主要是相互独立的。因此,从架构 POV 来看,为每个插件提供自己的“私有”ActorSystem 实例是很自然的。这种方法的优点是插件最大限度地相互隔离。另一方面,我读过一些关于 JVM 的 Akka 的文章,它们告诉我在应用程序中有太多的 ActorSystem 实例是一种反模式,因为 ActorSystem 是相当重量级的。
并发插件的实际数量是 10-20,即应用程序内部最多可能有 20 个 ActorSystem 实例在运行。同样,这是一个 GUI 桌面应用程序,它通常在终端服务器会话中运行(即可能有许多这些 GUI 应用程序在终端服务器上运行)。
那么 - 这种简单化的方法(每个库一个 ActorSystem)是否站得住脚?或者最好设计一种使用全局 ActorSystem 的方法,它使用每个插件的顶级 actor 来隔离插件。这种方法可能对性能更好,但我有点担心,因为插件彼此之间并没有那么孤立。
那么 - 这种“多系统”方法是一种好的架构方法,还是坚持“一个全局系统”设计更好?你在这里有什么体验?