2012-07-15 72 views
3

我已經在$PROJECT/src/main/java下創建了Java註釋(因爲我需要運行時間保留),我的scala代碼使用這些java註釋我們在$PROJECT/src/main/scala下。由此創建的Java註釋也使用Java ENUM作爲它的價值。使用sbt編譯Java註釋

如果我編譯項目,那麼sbt似乎不會先編譯Java註釋,並且錯誤地註釋註釋中enums的每次使用。如果我在scala代碼的註釋中註釋掉Java枚舉的所有用法並進行編譯,請取消註釋枚舉用法並重新編譯它,這一切都可以正常工作。

如何確保sbt在嘗試編譯scala代碼之前編譯我的java註釋和枚舉(即$PROJECT/src/main/java),然後再執行clean build?

編輯:我有一個裸露的骨頭build.sbt和正在使用SBT 0.11.2

回答

6

一些好消息:這是a known issue,並已解決。

一些壞消息:這是一個在2.10得到解決,該修補程序可能無法回遷到2.9.3(報價保羅·菲利普斯的問題線程):

我已經標記爲這個向後移植,這是不保證;我不是 現在有時間去做,但我希望在不久的將來。

一些好消息:如果你被困在前期2.10和Java源代碼不依賴於你的斯卡拉來源,you can just add the followingbuild.sbt,一切都很好:

compileOrder := CompileOrder.JavaThenScala 

一些不良新聞:如果您在2.10之前停滯不前,並且您的Java源代碼依賴於您的Scala資源,那麼我相當確定您運氣不佳,而註釋 - 編譯 - 取消註釋技巧可能是您最好的選擇。

+0

幸運的是現在我的Java源代碼是獨立於scala代碼的,上面的技巧確實可以很好的編譯。但是,publish-local命令似乎仍然失敗。有沒有辦法快速修復它? – 2012-07-15 18:28:39

+0

@cracked_all:如果你不關心發佈文檔,你可以在你的'build.sbt'中添加'publishArtifact packageDoc:= false',它應該可以工作。 – 2012-07-15 20:03:46

+0

謝謝你的出色信息! – 2012-07-16 04:43:02

0

我敢打賭你正面臨SI-2764。這已經在Scala 2.10中修復了。

在此期間,創建一個單獨的子項目爲您的Java註解,並從包含Scala代碼項目依賴於此。然後,Scala編譯器將只過程 .class文件,而該的.java文件。