Я не понимаю назначение папки src и отдельных пакетов - PullRequest
8 голосов
/ 12 июля 2010

За последние несколько месяцев я использовал eclipse только для python, и я хотел бы начать использовать его для java. Однако, согласно учебникам, которые я посмотрел, правильный способ организации вашего java-проекта - создать пакет в исходной папке с именем, например, com.project, и иметь все классы и тому подобное с именем com.project.class. , Вы также можете создавать подпакеты, которые работают аналогично подкаталогам, таким как com.project.utilities.*. С этим соглашением я не понимаю, почему я бы создал более одного пакета на проект. Поскольку весь код содержится в этой структуре, для какой цели служит папка src?

Надеюсь, я просто ошибаюсь из-за того, что это обычный способ структурирования Java-проекта, потому что он кажется довольно неудобным.

Кроме того, я еще не заболел этим, но не сделает ли это загрузкой внешних зависимостей боль? Если у меня есть папка img, расположенная рядом с папками src и bin, не нужно ли мне использовать «.. \ img *» для доступа к ней?

Ответы [ 3 ]

13 голосов
/ 12 июля 2010

Да, для небольшого проекта может не иметь особого смысла. Вы могли бы просто иметь:

MyProject
|
+ - FileOne.java
+ - FileTwo.java
+ - FileThree.java

Но для более крупных проектов вам может понадобиться разделить на пакеты классы, которые относятся к разным видам функциональности.

Например, базовая библиотека java имеет (назвать несколько)

java.lang (содержит основные предложения, такие как Object, String, Integer, Boolean, StringBuilder) java.util (содержит служебные классы, такие как List, ArrayList, Date, Map, Timer и т. д.) java.io (содержит классы для ввода / вывода, такие как File, InputStreamReader, BufferedReader и т. д.

java.sql, java.swing, java.text и т. Д. И т. Д.

Таким образом, вы «собираете вместе» классы, связанные друг с другом.

Исходный код для этих классов по соглашению находится в папке с именем src

Итак, вы бы получили:

YourProject 
|
+ - src 
     |
     + packageA
     |
     + packageB

Вам также может понадобиться отделить исходный код от скомпилированных файлов, поэтому папка classes используется по соглашению. Кроме того, вам может понадобиться отдельная папка для размещения библиотек третьей части, другая для ресурсов, таких как изображения, вспомогательные файлы или другие, другая для документации и т. Д.

Таким образом, типичный макет может быть:

YourProject
|
+ - src/ 
+ - lib/
+ - classes/
+ - resources/ 
+ - conf/ 
+ - bin/
+ - doc/
+ - etc/

Но, конечно, это имеет смысл только для крупных проектов.

Веб-приложения обычно содержат также папку WEB-INF и т. Д.

Если ваш проект содержит только пару классов, не беспокойтесь и используйте одну папку, но полезно знать, в чем причина.

3 голосов
/ 12 июля 2010

Я могу понять, почему это может показаться неудобным для небольших проектов.Однако, если вам когда-либо придется работать над проектом с сотнями (или тысячами) исходных файлов, наличие интуитивно понятных подпакетов является абсолютной необходимостью для упорядочения всего.

Что касается загрузки внешних зависимостей на основеОтносительный путь от места расположения исходного файла, все зависит от того, как организовано скомпилированное приложение.Это не типично ссылаться на ресурсы с ".. \ img", как вы описали.

2 голосов
/ 12 июля 2010

У вас нет , чтобы положить все в пакет. Для очень маленьких приложений вы можете просто поместить исходный файл (файлы) Java непосредственно в каталог src, что означает, что ваши классы будут принадлежать пакету «по умолчанию». Но большинство проектов используют уникальное имя пакета, чтобы избежать конфликта имен, например, между java.util.Date и java.sql.Date.

Использование каталога "src" - это соглашение, которое IDE, инструменты сборки и другие программисты легко понимают. Если вы избегаете «src» и вместо этого используете структуру каталогов, например:

com/project/MyClass.java
img/icon.jpg
...etc

Тогда вы не можете просто сказать IDE искать исходные файлы java в папке «com», потому что тогда он будет интерпретировать класс как «project.MyClass» вместо «com.project.MyClass». С другой стороны, вы не можете сказать, чтобы он искал исходные файлы в корневой папке, потому что тогда он будет ожидать, что папка img будет содержать исходные тексты java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...