简体   繁体   中英

sbt-assembly multimodule project?

My project is separated on multiple parts: * core project * utils (as example) project

Both of them have some unit-tests, and "core project" relies on code in "utils" project by "dependsOn" mechanism of sbt.

I am using sbt-assembly plugin for building "uber-jar"/"fat-jar", but sbt assembly task does`t run test on utils project - which is what I am trying to achieve (I can not see any tests from "utils project" in logs)

Changing "dependsOn" to "aggregate" introduce new problem:

sbt assembly aggregate deduplicate

something similar to this issue-on-github


So my question is how to organize multimodule project which can be assembled by sbt-assembly and all of the tests are executed during assembly task?

My guess is that you should have both dependsOn and aggregate relationships between your subprojects. They are not mutually exclusive, only serve different purposes.

DependsOn introduces code dependency, so if core depends on utils it means that you can reference types from utils in core.

Aggregate introduces task dependency. That means if you execute compile or test on core and it aggregates utils then the task will be executed on both subprojects.

Problems with deduplicate are another beast - it means, that there are duplicates in resources or classes when attempting to create one jar. The reasons for this may be various and you can tackle them by verifying the library dependencies in the build or creating MergeStrategy - https://github.com/sbt/sbt-assembly#merge-strategy

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM