2013-01-23 74 views
1

我開始在斯卡拉一個新的項目,在很大程度上依賴於源文件在另一個Java項目。起初,我想過在該項目中創建一個新的包/模塊,但看起來很亂。但是,我不想在新項目中複製Java代碼。我想出的最佳解決方案是通過svn外部依賴引用Java項目。另一個解決方案是從原始創建一個jar文件,我將它作爲一個庫附加到新的Scala項目中。但是,這使得保持最新更不方便。哪條路線更好?推薦碼再用

SVN外部:

  • 易於更新
  • 容易犯
  • 不方便設置

jar文件庫:

  • 易於安裝
  • 舊代碼是不是在積極發展(穩定,bug修復只)
  • 多步更新
  • 需要打開舊項目進行更改
+1

我會保持項目的獨立性,並可能考慮將其升級爲使用maven構建,然後您可以使用maven來管理項目與存儲庫中維護的工件之間的依賴關係。 – codeghost

+0

什麼意思是依賴_source_,本身? Scala編譯器可以讀取'.class'文件以派生Java類定義。無論如何,源代碼重複是一個非常糟糕的主意。如果您使用IDEA(也可能是Eclipse),則可以將它鏈接到外部庫的源代碼,而不必將源代碼合併到使用它的項目中。 –

+0

@RandallSchulz:我使用Intellij,我也考慮過這個問題,但我的一些同事使用Eclipse/Netbeans,所以我想遠離IDE特定的解決方案。 –

回答

2

你有你的斯卡拉項目,這取決於你的Java項目的一部分。對我來說,這聽起來像Java項目應該是一個庫,有一個版本號,它只是你的Scala項目引用的。或者也許那些在兩個項目中共享的部分應該分成一個庫。使用像Maven這樣的構建工具將保持清楚使用哪個版本。然後Java項目可以單獨演化,或者如果需要爲了Scala項目而改變,那麼如果你害怕破壞,你可以帶出一個新版本,並在其他上下文中繼續使用舊版本。

唯一的例外,你超越了,我能想到的二進制依賴是,如果Java代碼本身實際上是被在編譯時的一些方式,是特定於斯卡拉項目處理。比如說,註釋處理。

使用SVN的外部可能是一個解決方案。只要確保你使用分支和快照來確保在主幹上的Java代碼的一些更新不會突然讓你的Scala項目無法運行。

2

不管你是否有混合的scala/java都不相關。 如果兩個項目都非常不同並且具有不同的發佈週期,那麼您可能希望使用外部依賴項(jar)。 否則,您可以使用sbt並讓您的兩個項目成爲相同構建的子項目(您的sbt構建文件將使scala項目依賴於java項目)。甚至,如果它們真的如此交織在一起,只需要一個包含java和scala源文件的項目。 Sbt處理得很好。

Maven是我的選擇。