2014-10-17 64 views
4

我使用以下sbt項目結構中的IntelliJ 13.1的IntelliJ SBT插件在工程項目定義/ Build.scala

. 
├── build.sbt 
├── project 
│   ├── Build.scala 
│   ├── plugins.sbt 
├── src 
│   ├── main 
│   └── test 
└── target 

built.sbt很簡單,我只是宣佈一些依賴。

project/Build.scala是一個有點複雜,它採用定義了一個新項目:

懶VAL RiepeteKernel =項目(ID = 「riepete內核」,基地=文件(),設置= defaultSettings 「」)

Intellij似乎不喜歡它。它設置在項目設置兩個附加的模塊,像這樣:

enter image description here

當我嘗試編譯我的項目,我得到以下錯誤:

Error:scalac: Output path /home/simao/code/riepete/project/target/idea-test-classes is shared between: 
    Module 'riepete-build' tests, Module 'riepete-kernel-build' tests Output path /home/simao/code/riepete/project/target/idea-classes 
    is shared between: Module 'riepete-build' production, 
    Module 'riepete-kernel-build' production Please configure separate output 
    paths to proceed with the compilation. 
    TIP: you can use Project Artifacts to combine compiled classes if needed. 

因爲我只需要我的額外項目在控制檯上運行sbt dist,如果我刪除intellij創建的一切正常的兩個附加模塊,但每次重新啓動intellij時都需要執行此操作。

有沒有辦法讓intellij不創建這兩個額外的模塊?

謝謝

回答

2

這取決於你的sbt版本,但至少在0.13.x版本,你可以使用project macro這樣的:

lazy val riepete = project.in(file(".")) 

這樣的IntelliJ IDEA不會產生額外的模塊。

你甚至可以把這是你的build.sbt。根據我在大多數情況下的經驗,你可以只保留一個簡單的build.sbt文件,特別是最新版本的sbt。無論如何,我想保持在一個地方是有道理的:build.sbtBuild.scalaproject文件夾。

如果項目或子項目文件夾名稱包含-或其他字符,你可以隨時使用回蜱,例如:

lazy val `riepete-project` = project 
在這種情況下,你甚至不需要使用 .in(file(....作爲

宏將根據模塊的名稱從正確的文件夾中選擇文件。

+0

你是否知道如果可以使用該宏創建一些'Settings'到項目中? 爲什麼不明智地拿起項目,如果它是這樣定義的?謝謝 – simao 2014-10-22 12:22:35

+0

當然。這是可能的。您可以在項目中調用'settings'方法並添加您的設置:'lazy val riepete = project.in(file(「。」))。settings(....)。settings()',或者您可以使用普通方式。按照正常的方式,我的意思是添加設置鍵給你'build.sbt',例如:'libraryDependencies + = ....'。所有這些設置將被拾取。嘗試從'SBT'選項卡刷新項目(您可以在IntelliJ IDEA的右側邊欄中找到它)。如果不工作,您可以再次導入項目。刪除'.idea'文件夾並重新導入將是最後的解決方案。 – 2014-10-22 15:38:08

+0

你好。是的,這工作。非常感謝! – simao 2014-10-23 16:10:02

0

一種可能性是不使用IntellJ的SBT導入功能,並使用sbt-idea插件生成的文件。請注意,您需要重新運行SBT項目更改(依賴項添加/刪除等)。

另一種方法是在導入SBT項目時關閉自動導入選項,然後在IDEA項目結構對話框中刪除額外的模塊。

+0

如果我使用'sbt-idea',我需要在intellij中禁用某些東西嗎?我之前沒有使用sbt-idea,因爲看起來有點過時,但也許我錯了。我會嘗試一下。謝謝 – simao 2014-10-22 12:23:13

+0

不,如果你的意思是插件,你不需要禁用任何東西,但正如答案中提到的那樣,你需要禁用自動導入選項。通過'idea-gen'生成想法模塊文件後,只需從IntelliJ IDEA中打開項目(不要「導入」,而是「打開」)。 – 2014-10-22 15:44:31