如何将sbt辅助子项目排除在IDEA导入范围之外?
如何让IDEA不导入sbt中的辅助子项目?
我在build.sbt中配置了辅助子项目,用于调用不同配置的插件,代码示例如下:
lazy val root = project.in(file(".")).aggregate(app, cfg1, cfg2) lazy val app = project.in(file("modules/app")) lazy val cfg1 = project.in(file("target/cfg1")) .enablePlugins(SomePlugin).settings(somePluginOption := "a") lazy val cfg2 = project.in(file("target/cfg2")) .enablePlugins(SomePlugin).settings(somePluginOption := "b")
通过这种方式,我可以按需执行任务(如sbt cfg1/someTask)。但IDEA在导入/同步项目时会将这些辅助子项目与其他子项目一同添加,而我不希望它们出现在IDEA中,请问是否有可行方法?
方法1:使用sbt官方的ideSkipProject设置
给辅助子项目添加ideSkipProject := true配置,IDEA的sbt导入器会自动识别并跳过这些项目,同时不影响命令行执行相关任务。修改后的代码如下:
lazy val root = project.in(file(".")).aggregate(app, cfg1, cfg2) lazy val app = project.in(file("modules/app")) lazy val cfg1 = project.in(file("target/cfg1")) .enablePlugins(SomePlugin) .settings( somePluginOption := "a", ideSkipProject := true ) lazy val cfg2 = project.in(file("target/cfg2")) .enablePlugins(SomePlugin) .settings( somePluginOption := "b", ideSkipProject := true )
方法2:通过sbt-idea插件排除模块
如果使用sbt-idea插件生成IDEA项目文件,可在根项目中配置excludeModules指定需排除的子项目:
- 先在
project/plugins.sbt中添加插件(未添加的话):
addSbtPlugin("org.jetbrains" % "sbt-idea" % "1.1.7")
- 在build.sbt的根项目中添加排除配置:
lazy val root = project.in(file(".")).aggregate(app, cfg1, cfg2) .settings( excludeModules := Seq("cfg1", "cfg2") )
执行sbt idea生成IDEA项目文件后,cfg1和cfg2就不会被包含进去。
推荐方法1,无需额外插件,是sbt官方标准配置,兼容IDEA自带的sbt同步功能。
内容的提问来源于stack exchange,提问作者Marcin Wisnicki
相关产品推荐
相关产品推荐

