2013-10-05 2 views
2

По некоторым причинам мне нужно использовать длинные имена пакетов в моем проекте. Как:Подкаталоги Scala/Java с точками в именах

com.example.foo.bar.bazz.anotherlongsubpart.andfinallytheactualpackagname 

Так, учитывая название конвенции (по крайней мере то, что я знаю о имени конвенции в Java), я должен создать соответствующую структуру каталогов вместо точек с косой чертой:

com/example/foo/bar/bazz/anotherlongsubpart/andfinallytheactualpackagname 

Как для меня выглядит слишком некрасиво :) Так что я попытался вместо того, чтобы заменить слешами только часть точек:

com.example.foo.bar.bazz.anotherlongsubpart/andfinallytheactualpackagname 

другими словами у меня есть здесь один пакет/каталог с длинным названием «com.example.foo.bar.b azz.anotherlongsubpart "и еще один с" andfinallytheactualpackagname ". Является ли законным это делать? Я попытался скомпилировать все это с помощью Simple Build Tool и запустить мои модульные тесты. И это работает хорошо. Как я бы назвал это более обычным способом с косыми чертами.

Так как мой эксперимент показывает, что он работает хорошо, по крайней мере, с SBT. Но я не уверен, может ли такая практика привести к дальнейшим проблемам? Может быть, в разных средах с разными типами загрузчиков классов и т. Д.?

+0

Если вы собираетесь это сделать, вы можете просто разместить исходные файлы непосредственно в 'src/main/scala /'. –

+0

Хорошая идея, Кристофер, спасибо. Ну, я использую IntelliJ Idea, и он отмечает такие вещи, как предупреждения. В то время как в примере выше ничего плохого нет. Это неважно, но я предпочитаю быть в хороших отношениях с моей IDE. :) –

+0

Alt + ввод, игнорирование осмотр. Проблема решена: D –

ответ

8

В Scala имя каталога не должно отображаться в пакете, объявленном в исходном файле, компилятор не будет принудительно применять это.

В Java вы не можете этого сделать. Исходный файл должен находиться в правильном каталоге (как это определено именем пакета, объявленным исходным файлом) для его компиляции.

Итак, если вы в Scala, вы можете сделать это столько, сколько хотите, на Java, нет, вы не можете.

+0

Мой проект только в Скала. Но как насчет файлов конечного класса, упакованных в JAR. Будут ли какие-либо штрафы, если я буду запускать свою банку на разных JVM? –

+0

Нет, это не будет иметь никакого значения. –

+0

Компилятор Scala разместит их в соответствующих папках внутри JAR. –

3

Я бы не рекомендовал это делать. Как обсуждалось в разделе Oracle package name documentation Многие инструменты, которые необходимо перевести между именами квалифицированных классов и каталогами, просто заменит «.». с разделителями файлов, и ваши имена нарушат это.

+0

Есть пределы, за которые я готов подчиняться инструкциям кого-то в Sun с 1995 года ... –

+1

@ChristopherMartin Это а не «инструкции», это правила Java, так же как и с любым синтаксическим правилом языка. –

4

Scala все равно, что названы вашими каталогами, Java. Если у вас есть Java-код, следуйте его соглашениям. Для Scala сделайте все, что вам нравится (в том числе не используйте имя пакета для каталогов).

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