scala之SBT:如何使子项目在开发期间相互依赖,以及在作为 Maven 工件发布时如何相互依赖

yyy_WW 阅读:36 2025-04-02 23:11:03 评论:0

在开发过程中,我使用了以下语法:

lazy val root = project.in(file(".")).dependsOn(runner) 

但为了发布,我需要这样做:

libraryDependencies += ... % ... % ...  

但我不希望在开发期间存在 libraryDependencies 东西,否则我需要在每次编译时都发布 Local,这很烦人。除了注释掉并在我发布时将其放回原处之外,还有什么好的解决方案吗?

请您参考如下方法:

您不应该将子项目添加为 libraryDependencies,即使是在 publish 期间也是如此。

现在要发布模块,您可以创建一个简单的 publishSettings 变量:

val publishSettings : Seq[Setting[_]] = Seq( 
    publishTo := Some("your company releases" at "http://yourrepository"), 
    credentials += Credentials( 
      "Repository", 
      "repositoryUrl", 
      "username", 
      "password!" 
    ), 
    publishMavenStyle := true, 
    publishArtifact in Test := false, 
    pomIncludeRepository := { _ => true } 
  ) 
 
lazy val main = Project(..).aggregate(subproject1, subproject2, // etc) 
 
lazy val subproject1 = Project( 
  settings = Project.defaultSettings ++ publishSettings 
); 
lazy val subproject2 = Project( 
  settings = Project.defaultSettings ++ publishSettings 
).dependsOn(subproject1) 

SBT 现在将在后台自动重新编译依赖项。不要将它们添加为 libraryDependencies,只将它们放在 dependsOn 中。


标签:Maven
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号