То, что следует, может быть скорее обходным путем, но позволяет публиковать и относительно легко понять:
В проекте верхнего уровня вы можете установить configure(aggregate in publish := false)
. Это позволяет большинству задач распространяться на подпроект java как обычно, но задача публикации не распространяется, и поэтому вы можете контролировать публикацию для каждого проекта. Теперь подпроект java можно опубликовать ровно один раз, используя publish
вместо +publish
:
sbt java_subproject/publish
sbt +top_level_project/publish
Недостатком этого подхода является то, что если у вас есть несколько подпроектов, каждый из них должен быть опубликован отдельно:
sbt +sub_project_1/publish
sbt +sub_project_2/publish
...
sbt java_subproject/publish
sbt +top_level_project/publish
Если вы хотите получить фантазию, вы можете вставить подпроект shim для любых подпроектов java и сделать проекты java подпроектом этого shim, а затем настроить aggregate in publish := false
в shim. С этой организацией вы можете сделать:
sbt java_shim_project/publish // publish java projects exactly once
sbt +top_level_project/publish // publish regular scala projects as usual