2014-04-10 3 views
1

Я пишу Scala-плагин для Java-проекта. (По сути, я пишу класс Scala, который является подклассом класса Java. Он предназначен для запуска в приложении Java.) Я могу создать как проект Java, так и проект Scala в среде Scala/eclipse IDE, и я могу скажите одному из них обратиться к другому. Но когда я пытаюсь сказать каждому, чтобы обратиться к другому, я получаю сообщение об ошибке, говорящее, что у меня есть цикл в моем пути сборки. Когда я опускаю ссылку из проекта Java на проект Scala (но включаю ссылку из проекта Scala в проект Java), я могу написать подкласс и обратиться к требуемым Java-классам. Но теперь приложение Java не может видеть подкласс Scala. Есть ли хороший способ сделать что-то подобное?Проект Scala как «подпроект» проекта Java в eclipse

Спасибо.

ответ

2

В общем случае невозможно создать циклические ссылки между проектами. И это вполне естественно. Предположим, что у вас есть проекты «A» и «B», которые являются взаимозависимыми. Это означает, что для компиляции «B» вы должны иметь «A», уже скомпилированный. Но для компиляции «A» вам нужно «B» для компиляции. Как вы нарушаете такой цикл?

Это, в некоторых частности футляры может быть возможен. Например, если в этих проектах нет циклов зависимостей между классами, то есть нет циклов зависимостей, таких как com.a.X -> com.b.Y -> com.b.Z -> com.a.X, тогда может быть возможно скомпилировать оба проекта в кусках, пока оба они не будут полностью скомпилированы. Но для этого потребуются сложные алгоритмы и система отслеживания зависимостей, которые просто не стоят того.

Системы на основе плагинов обычно структурированы следующим образом. Основной проект разделяется на две части: фактическая программа и ее API-интерфейс плагина (фактическая программа зависит от этого API). Тогда есть плагины, которые зависят от API, но не от основной программы. Основная программа теперь может иметь зависимости от плагинов, потому что теперь нет циклов.

+------------------------+ 
|      | 
+-> Plugin 1 --+  Project 
|    |   | 
+-> Plugin 2 --+--+  V 
|    | +--> API 
+-> Plugin 3 --+ 

Еще лучше связать программу с плагинами во время выполнения. Тогда нет никаких зависимостей во время компиляции Project от плагинов. Система выполнения (например, OSGi или JBoss Modules или что-то пользовательское) становится ответственной за поиск и загрузку плагинов во время выполнения. Этот подход потребует некоторых изменений в системе сборки и способа запуска вашего проекта, но это может стоить того. Конечно, это зависит от ваших фактических потребностей.

1

This Вопрос о стеке, как представляется, решает мою проблему. Его решение - «Добавить Scala Nature» в проект Java: щелкните правой кнопкой мыши проект и выберите «Настроить»> «Добавить природу Scala». После этого можно включить файлы Scala в проект Java! Вот и все.

+0

Это просто делает проект проектом Scala, а проекты Scala могут включать файлы Java. –

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