2015-10-06 25 views
2

構建過程使用代碼我有一個多項目建立與,比如說,項目A和B(在根build.sbt的示例):SBT:從一個項目中的另一個

lazy val projectA = (project in file("A")) 
lazy val projectB = (project in file("B")) 

我想使用projectA中的代碼生成一些.java文件,並將它們作爲projectB構建過程的一部分放入projectB中,然後在compileB運行projectB。在projectA中爲此我有一個Scala對象。實質上,我在projectA中有一個編譯器,它生成需要在projectB 之前運行編譯步驟的之前的文件。我已經試過如下:

1)請項目B依賴了projectA:

lazy val projectB = (project in file("B")) dependsOn(projectA): 

2)創建項目B /項目/ Build.scala那裏,在我定義了一個任務:

import projectA.somePackage.ourObject 
val myTask = taskKey[Unit]("runs before compilation") 

myTask := { 
    ourObject.thatMethod() 
} 

(compile in Compile) <<= (compile in Compile) dependsOn(myTask) 

但是,我無法從projectA中導入這個文件中的東西。我可能試圖以錯誤的方式做到這一點,但我找不到任何教程或示例向我展示如何做到這一點:(

回答

1

不幸的是,這不是一個完整的答案,但它應該比評論:

由於SBT是遞歸的,projectB/project本身就是一個SBT項目,可以依靠projectA(添加projectB/project/project/Build.scalaprojectB/project/build.sbt相應地)不知道這是否會工作

我認爲正確的做法是。使projectB:compile取決於projectA:run,類似於

(compile in (projectB, Compile)) <<= (compile in (projectB, Compile)).dependsOn(run in (projectA, Compile)) 

如果您需要使用的對象不是由run使用的默認之一,projectA專門爲運行代碼生成添加新任務。

+0

感謝您的評論 - 不幸的是,我真的無法以任何方式,形狀或形式工作。我認爲,我只是不太瞭解SBT,而且我找不到任何*例子。 – Alathon

相關問題