Как вы организуете ресурсы без исходного кода, доступные по пути к классам в вашем java-проекте?

StackOverflow https://stackoverflow.com/questions/349787

Вопрос

В программном проекте, написанном на Java, у вас часто есть ресурсы, которые являются частью проекта и должны быть включены в classpath.Например, некоторые шаблоны или изображения, которые должны быть доступны через classpath (getResource).Эти файлы должны быть включены в созданный JAR-файл.

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

Это было полезно?

Решение

Я предпочитаю ваше последнее решение:отдельный каталог, который имитирует структуру пакета исходного кода.Таким образом, они не будут загромождать ваш исходный код, но будут находиться прямо рядом со скомпилированными файлами классов в упакованном файле JAR.

Другие советы

Мавен помещает их в src/main/resources/ (Java-код будет отправлен в src/main/java/).Основная причина заключается в том, что Maven может компилировать код на разных языках, и имеет смысл хранить их отдельно, чтобы одна компиляция не путалась с файлами для другой.

В случае ресурсов Maven заменит в них переменные до того, как они будут добавлены в Jar, поэтому они также являются "скомпилированными" исходными кодами.

Лично я бы предпочел иметь их вместе с исходным кодом, если они тесно связаны с определенными частями кода и если их не слишком много.

Но если для этих файлов имеет смысл иметь свою собственную организационную структуру, или если существуют сотни файлов, из-за которых было бы трудно найти исходный код среди них, я бы сохранил их отдельно.

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

С современными инструментами это также не имеет особого значения.Используете ли вы Eclipse, Netbeans или другой инструмент, все они позволяют вам иметь двоичные пакеты с макетом, отличным от исходного кода.Так что, в конце концов, вы можете делать это так, как вам хочется.

Лично я стараюсь избегать смешивания исходного кода с ресурсами, потому что обычно я меняю ресурсы очень редко, но исходный код меняю очень часто.

Обычно я хожу вот так:

project/src
project/resources
project/classes
project/lib
project/dist

И то, и другое Src и Ресурсы пусть структура пакета и файл сборки будут классы и Ресурсы в качестве входных данных для jar, который помещается в дист.

При внутреннем запуске путь к классу выглядит примерно так: библиотека; классы; ресурсы;

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

Вы можете поместить эти вещи в classpath, если ваш инструмент сборки не запутается.Eclipse не будет пытаться скомпилировать ваши файлы jpeg, как и Ant, так что беспокоиться особо не о чем.Приятно то, что если у вас есть много связанных вещей, вы можете хранить их вместе, организованными по функциональности, а не по типу файла.

Мы делаем это там, где я работаю;у нас есть сообщения электронной почты, для которых требуется немного кода и несколько статических ресурсов.Все эти вещи хранятся вместе в одной папке в пути к исходному коду java;мы можем легко добавлять и удалять электронное письмо из системы, не забывая ничего и не допуская ошибок, таких как несоответствие src / путей к ресурсам или потерянные файлы в одном дереве, отсутствующие в другом дереве.

Как уже было сказано, это зависит от вас и может отличаться в зависимости от проекта.Например, с помощью Калитка, это довольно обычно и практично хранить .html файлы прямо рядом с классами.Кроме того, я часто сохраняю некоторую конфигурацию вместе с исходным кодом - META-INF, WEB-INF, ведение журнала.

Чтобы заставить Maven брать ресурсы из исходного дерева, используйте это:

<build>
   <resources>
     <resource>
         <directory>src/main/resources</directory>
     </resource>
     <!-- Web - Wicket -->
     <resource>
         <filtering>false</filtering>
         <directory>src/main/java</directory>
         <includes><include>**</include></includes>
         <excludes><exclude>**/*.java</exclude></excludes>
     </resource>
  </resources>

  <testResources>
     <testResource>
         <directory>src/test/resources</directory>
     </testResource>
     <!-- Web - Wicket -->
     <testResource>
         <filtering>false</filtering>
         <directory>src/main/java</directory>
         <includes><include>**</include></includes>
         <excludes><exclude>**/*.java</exclude></excludes>
     </testResource>
  </testResources>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top