Подумайте о пакетах исходного кода Java как о одном большом иерархическом пространстве имен. Коммерческие приложения обычно находятся под «com.mycompany.myapp» (сайт для этой заявки может быть «http://myapp.mycompany.com», хотя это, очевидно, не всегда так).
Как вы упорядочиваете материал под вашим пакетом myapp, в значительной степени зависит от вас. Различие, которое вы выполняете для C# между исполняемыми (.exe), DLL и низкоуровневыми классами, не существует в одной и той же форме на Java. Весь исходный код Java скомпилирован в файлы .class (содержимое которых называется «байт-код»), который может быть запущен виртуальной машиной Java (JVM) на многих платформах. Таким образом, в классах высокого уровня/низкого уровня нет присущих различий, если вы не приписываете такие уровни через свою упаковку. Общий способ упаковки:
- com.mycompany.myapp: основной класс; MyApp (с основным методом)
- com.mycompany.myapp.model: классы моделей доменов; Заказчик, Заказ и т. Д.
- com.mycompany.myapp.ui: пользовательский интерфейс (представление или представление) код
- com.mycompany.myapp.service: услуги в пределах вашего приложения, то есть 'бизнес-логика'
- ком. mycompany.myapp.util: вспомогательные классы, используемые в нескольких местах
это предполагает автономное приложение Java, это может быть иначе, если это веб-приложение, используя один из многих структур.
Эти пакеты соответствуют иерархии каталогов в вашем проекте. При использовании Eclipse корень такой иерархии называется «исходным каталогом». Проект может определять несколько исходных каталогов, обычно «основной» и «тестовый» исходный каталог.
Пример файлов в проекте:
src/test/java/com/acme/foo/BarTest.java
src/main/java/com/acme/foo/Bar.java
lib/utilities_1_0.jar
А внутри utilities_1_0.jar:
com/acme/foo/BarUtils.class
BarUtils.class это скомпилированный класс Java, так что в платформе независимой форме байт-код, который может быть работать на любом JVM. Обычно jarfiles содержит только скомпилированные классы, хотя иногда вы можете загрузить версию jar, которая также содержит исходные (.java) файлы. Это полезно, если вы хотите прочитать исходный код файла jar, который вы используете.
В приведенном выше примере Bar, BarTest и BarUtils находятся в одном пакете com.acme.foo, но физически находятся в разных местах вашего жесткого диска.
Классы, которые находятся непосредственно в исходной папке, находятся в «пакете по умолчанию», обычно не рекомендуется содержать классы, потому что неясно, к какой компании и приложению принадлежит класс, и вы можете получить конфликты имен если какой-либо файл jar, который вы добавляете в свой путь к классу, содержит класс с таким же именем в пакете по умолчанию.
Теперь, если вы разворачиваете это приложение, оно обычно скомпилируется в .class-файлы и вставляется в .jar (что в основном является причудливым именем для .zip-файла плюс информация о манифесте). Создание приложения .jar не требуется для запуска приложения, но оно полезно при развертывании/распространении вашего приложения. Используя информацию манифеста, вы можете сделать исполняемый файл .jar, чтобы пользователь мог легко запустить его, см. [A].
Обычно вы также будете использовать несколько библиотек, то есть существующие файлы .jar, полученные из Интернета. Очень распространенными примерами являются log4j (фреймворк регистрации) или библиотеки JDBC для доступа к базе данных и т. Д. Также у вас могут быть свои собственные подмодули, которые развернуты в отдельных jarfiles (например, «utilities_1_0.jar» выше). Как вещи разделены по jarfiles - это вопрос развертывания/распространения, они все еще используют универсальное пространство имен для исходного кода Java. Таким образом, вы можете разархивировать все файлы jarfiles и поместить содержимое в одну большую структуру каталогов, если хотите (но вы, как правило, этого не делаете).
При запуске приложения Java, которое использует/состоит из нескольких библиотек, вы сталкиваетесь с тем, что обычно называют «адским путем класса». Один из самых больших недостатков Java, который мы знаем. (примечание: помощь, предположительно, on the way). Чтобы запустить приложение Java в командной строке (т. Е. Не из Eclipse), вам нужно указать каждое расположение файла .jar в пути к классам. Когда вы используете одну из многих фреймворков Java (Maven, Spring, OSGi, Gradle), обычно существует определенная форма поддержки для облегчения этой боли.Если вы создаете веб-приложение, вам просто нужно будет придерживаться своих соглашений о расслоении/развертывании, чтобы иметь возможность легко разворачивать предмет в выбранном вами веб-контейнере (Tomcat, Jetty, Glassfish).
Надеюсь, это даст общее представление о том, как все работает на Java!
[a] Для создания исполняемого флага приложения MyApp вам нужен JDK на вашем пути. Затем используйте следующую командную строку в вашей компиляции (бен или целевой) Каталог:
jar cvfe myapp.jar com.mycompany.myapp.MyApp com\mycompany\myapp
Вы можете затем выполнить его из командной строки с:
java -jar myapp.jar
или двойным щелчком по файлу банка. Обратите внимание, что в этом случае вы не увидите консоль Java, поэтому это полезно только для приложений, которые имеют собственный графический интерфейс (например, приложение Swing) или могут работать в фоновом режиме (например, на сервере сокетов).
, так что все, что вы говорите, имеет смысл, но только когда я получаю Eclipse с иерархией папок например: com \ mydomain \ myapp \ util затем добавить исходный файл с объявлением: package com.mydomain.myapp.util; , тогда Eclipse создает целый набор новых папок в папке util: com \ mydomain \ myapp \ util \ com \ mydomain \ myapp \ util \ src \ myclass.java –
Вы вводите пустую иерархию пакетов в исходную папку Eclipse. Исходная папка Eclipse должна быть чем-то вроде «src/main/java /» (если вы следуете соглашениям Maven). Это просто отправная точка для вашей иерархии пакетов; папка 'src/main/java' укажет на пакет по умолчанию. В этой папке Eclipse будет генерировать папки для соответствия пакетам, поэтому ваш класс класса окажется в /src/main/java/com/mydomain/myapp/util/myclass.java –
Есть ли проект Java на GitHub с этой структурой папок для реальный пример? –