Распространение Java в виде jar-файла, связанного с config, libs и deps - PullRequest
0 голосов
/ 26 февраля 2010

Я разрабатываю фреймворк, для работы которого нужно много вещей.У меня есть несколько папок внутри моего проекта Eclipse, которые необходимы

[root]<br> - config<br> - src<br> - lib<br> - serialized

Также есть важные файлы, такие как log4j.properties и META-INF dir внутри каталога src.

Интересно, есть ли способ распространения одного JAR-файла, содержащего все необходимые файлы, чтобы моему графическому интерфейсу пришлось импортировать только один JAR-файл?Я предполагаю, что мне нужно исключить папку config, чтобы сделать фреймворк настраиваемым.

Мне также интересно, есть ли способ, например, переместить log4j.properties в каталог config, чтобы я могесть одна папка конфигурации со всеми необходимыми конфигурациями?

Спасибо за помощь и советы по этому вопросу!

Marco

Ответы [ 2 ]

0 голосов
/ 26 февраля 2010

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

Вероятно, вы загружаете эти ресурсы из файловой системы. Оказавшись в банке, вам нужно загрузить их как ресурсы пути к классу через class.getResourceAsStream или аналогичный.

Что касается зависимых банок, которые у вас могут быть, то обычной практикой является размещение их в качестве дополнительных банок на пути к классам. Я знаю, что это усложняет вещи, но разработчики привыкли делать это. Природа Java-ландшафта заключается в том, что это неизбежно. Например, Spring Framework предоставляет поставляемый zip-файл с основным файлом jar и включенными зависимостями jar.

Будет ли ваша библиотека использоваться в контексте EE или SE? Если это контекст EE, то вам действительно не нужно беспокоиться о проблемах конфигурации и пути к классам, так как об этом позаботится контейнер. В контексте SE это намного сложнее, так как эту работу нужно выполнять вручную.

0 голосов
/ 26 февраля 2010

Да, но не совсем. Вы можете взять все свои зависимости, распаковать их и просто слить их в большую банку. Это то, что делает плагин maven jar, если вы создаете jar с зависимостями. Единственная проблема заключается в том, что это может привести к конфликту файлов (предположим, что две ваши зависимости содержат log4j.properties). Это одна из проблем, возникающих, например, с некоторыми из библиотек Spring.

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

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

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

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

...