Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala SBT:依赖于其他SBT项目而不发布_Scala_Build Automation_Sbt - Fatal编程技术网

Scala SBT:依赖于其他SBT项目而不发布

Scala SBT:依赖于其他SBT项目而不发布,scala,build-automation,sbt,Scala,Build Automation,Sbt,我有一组松散相关的组件,其中一些组件依赖于其他组件。具体来说,假设我们有“公共”、“a”和“b”三个组件。“common”没有任何依赖项,但所有其他项目都使用“common”。此外,“a”依赖于“b”。所有组件都是用Scala编写的,我想使用sbt来构建它们 拥有以下属性非常好: 多个人在不同的项目上工作,这就是为什么我们不希望有一个存储库,而是希望每个项目有一个存储库 构建一个项目应该很容易,所有依赖项都应该自动构建(如果必要的话)。也就是说,如果我修改“common”,然后构建“b”,那么应

我有一组松散相关的组件,其中一些组件依赖于其他组件。具体来说,假设我们有“公共”、“a”和“b”三个组件。“common”没有任何依赖项,但所有其他项目都使用“common”。此外,“a”依赖于“b”。所有组件都是用Scala编写的,我想使用sbt来构建它们

拥有以下属性非常好:

  • 多个人在不同的项目上工作,这就是为什么我们不希望有一个存储库,而是希望每个项目有一个存储库
  • 构建一个项目应该很容易,所有依赖项都应该自动构建(如果必要的话)。也就是说,如果我修改“common”,然后构建“b”,那么应该首先构建“common”,然后再构建“b”
  • 能够在一个IDE中拥有所有项目,这样重构和类似的IDE任务就能正常工作,并且所有受影响的项目都能正确更改
  • 就我所见,在sbt中存在两种可能的依赖关系;我们要么使用子项目,要么使用托管依赖项(被推送到某个地方,例如本地)。然而,这两个选项似乎都没有提供上述(1)或(2)。特别是

    • 使用子项目迫使我们使用单个存储库,因为所有子项目都必须位于主项目的子目录中
    • 在本地发布项目并使用托管依赖项是很麻烦的,因为更改“common”然后生成“b”只会在首先生成并发布该项目的情况下拾取“common”中的更改。我可以看出,托管依赖关系在许多情况下都是有用的,但对于我们的特定用例,它们似乎并不能很好地工作。我们经常在几个项目上工作,并同时更改它们。出于这个原因,不得不出版往往显得过于复杂

    真的没有办法说一个sbt项目依赖于位于某个(相对)位置的另一个sbt项目,并且让sbt确定何时构建依赖关系吗?

    使用sbt,您可以使用源依赖关系

    lazy val root = Project("root", file("."), settings = ...) dependsOn(dispatchLiftJson)
    
    lazy val dispatchLiftJson = uri("git://github.com/dispatch/dispatch-lift-json#0.1.0")
    
    在本例中,它将从git获取。您可以指定磁盘上的文件位置,尽管我找不到示例。可能

    lazy val dep = file("/path/to") 
    

    我自己也在努力解决这个问题——目前我使用的是publishlocal方法,它可以正常工作

    给定目录

    • /build/some\u app/
    • /build/some_lib/
    文件
    /build/some_app/build.sbt

    lazy val someLib = ProjectRef(file("../some_lib"), "exportedSomeLib")
    // = RootProject(file("../some_lib")) also works?
    
    lazy val root = (project in file("."))
                    .dependsOn(someLib)
    
    lazy val exportedSomeLib = (project in file("."))
    
    /build/some lib/build.sbt
    中:

    lazy val someLib = ProjectRef(file("../some_lib"), "exportedSomeLib")
    // = RootProject(file("../some_lib")) also works?
    
    lazy val root = (project in file("."))
                    .dependsOn(someLib)
    
    lazy val exportedSomeLib = (project in file("."))
    

    注意:请注意,在这些文件的两个根作用域中定义的项并不总是会导致错误,但如果键(=值名称)在.sbt文件之间发生冲突,则会在全局(?)作用域中以静默方式更改值<代码>惰性val dep=uri(“file:///path/to“适合我。相对路径也起作用。示例:
    lazy val helloWorldProj=uri(“file:///D:/EclipseProjects/helloworld“
    lazy val helloWorldProj=uri(“../helloworld”)
    如果我没有错的话,必须将它们添加到build.sbt文件中?