2014-10-17 2 views
4

Я использую следующую структуру sbt проекта в Intellij 13.1Intellij SBT плагин с определением проекта в проекте/Build.scala

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

Моих built.sbt очень просто, я просто объявить некоторую зависимость.

Мой project/Build.scala является немного более сложным, он определяет новый проект с помощью:

ленивый вал RiepeteKernel = Project (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 идея не будет создавать дополнительный модуль.

Вы можете даже положить это ваше build.sbt. Согласно моему опыту, в большинстве случаев вы можете просто сохранить простой файл build.sbt, особенно с последними версиями sbt. В любом случае, я думаю, что держать его в одном месте имеет смысл: build.sbt или Build.scala в project папке.

Если Вы проектируете или имя папки подпроекта содержит - или другие символы, вы всегда можете использовать обратно клещ, например:

lazy val `riepete-project` = project 

в этом случае вам даже не нужно использовать .in(file(.... как макрос будет выбирать файлы из правой папки на основе имени модуля.

+0

Знаете ли вы, можно ли добавить в проект некоторые «Настройки», если он создан с использованием этого макроса? Почему intellij не забирает проект, если он определен так? Спасибо – simao

+0

Конечно. Возможно. Вы можете вызвать метод 'settings' в проекте и добавить свои настройки:' lazy val riepete = project.in (файл (".")). Settings (....). Settings() 'или вы можете использовать обычный способ , Обычно я имею в виду добавление ключей установки к 'build.sbt', например:' libraryDependencies + = .... '. Все эти настройки будут подняты. Попробуйте обновить проект с вкладки «SBT» (его можно найти на правой боковой панели в IntelliJ IDEA). Если вы не работаете, вы можете снова импортировать проект. Последним решением будет удаление папки '.idea' и реимпортация. –

+0

Привет. Да, это работает. Большое спасибо! – simao

0

Одна возможность не использовать функцию импорта SBT IntellJ и генерировать свои файлы, используя sbt-idea плагин. Обратите внимание, что вам нужно будет повторно запустить его на изменения проекта SBT (добавление/удаление зависимостей и т. Д.).

Другой вариант - отключить опцию автоматического импорта при импорте проекта SBT, а затем удалить дополнительные модули в диалоговом окне структуры проекта IDEA.

+0

Если я использую 'sbt-idea', мне нужно отключить что-то в intellij? Я не использовал sbt-идею раньше, потому что кажется немного устаревшим, но, возможно, я ошибаюсь. Я попробую.спасибо – simao

+0

Нет, вам не нужно ничего выводить, если вы имеете в виду плагин, но, как упоминалось в ответе, вам нужно отключить опцию автоматического импорта. После создания файлов модулей идей с помощью 'idea-gen' просто откройте проект из IntelliJ IDEA (не' Импорт', а 'Открыть'). –

Смежные вопросы