sbt-assembly 多模块项目?

Posted

技术标签:

【中文标题】sbt-assembly 多模块项目?【英文标题】:sbt-assembly multimodule project? 【发布时间】:2018-04-26 07:59:36 【问题描述】:

我的项目分为多个部分: * 核心项目 * utils(作为例子)项目

他们都有一些单元测试,“核心项目”通过sbt的“dependsOn”机制依赖“utils”项目中的代码。

我正在使用sbt-assembly plugin 构建“uber-jar”/“fat-jar”,但sbt assembly 任务不会在 utils 项目上运行测试 - 这是我想要实现的(我看不到日志中来自“utils project”的任何测试)

将“dependsOn”改为“aggregate”会引入新问题:

sbt 程序集聚合去重

类似issue-on-github的东西


所以我的问题是如何组织可以由sbt-assembly 组装的多模块项目,并且所有测试都在组装任务期间执行?

【问题讨论】:

【参考方案1】:

我的猜测是,您的子项目之间应该同时具有dependsOn 和聚合关系。它们并不相互排斥,仅用于不同的目的。

DependsOn 引入了代码依赖,所以如果 core 依赖于 utils 就意味着你可以从 core 中的 utils 中引用类型。

聚合引入了任务依赖。这意味着如果您在核心上执行编译或测试并聚合 utils,那么该任务将在两个子项目上执行。

重复数据删除问题是另一种问题 - 这意味着在尝试创建一个 jar 时资源或类中存在重复项。造成这种情况的原因可能多种多样,您可以通过验证构建中的库依赖关系或创建 MergeStrategy 来解决它们 - https://github.com/sbt/sbt-assembly#merge-strategy

【讨论】:

以上是关于sbt-assembly 多模块项目?的主要内容,如果未能解决你的问题,请参考以下文章

1.1springboot 多模块项目开发

vue多项目多模块打包

使用Maven构建多模块项目

使用Maven构建多模块项目

idea打开项目没有模块文件的解决方法

是否可以将多模块 pom 作为父多模块 pom 的模块?