Сборка Java-проекта с Maven - PullRequest
0 голосов
/ 16 марта 2011

мой вопрос состоит из 3 частей: короткой, длинной и дополнительной.Я начну с короткого:

Есть ли хороший учебник / пример, как собрать какую-то типичную (например, сборку, подобную apache?), Я имею в виду учебник, который будет посвящен разработке приложения с использованием eclipse и, наконецпоместите его в красивую структуру каталогов, например:

bin
conf
lib
LICENSE.txt

И длинная часть вопроса: как правильно разместить мой log4j.properties без испортить мою окончательную сборку?Я знаю, что есть много ответов типа «положить его в src / main / resources», и я сделал, и теперь он работает в разработке.Я помещаю все свои файлы конфигурации в src / main / resources, потому что я просто загружаю файлы конфигурации через classpath (.getClassLoader (). GetResourceAsStream (name);), и я предполагаю, что это лучший метод.Но когда я помещаю его в папку src / main / resources, тогда, когда я запускаю mvn package, log4j.properties помещается в jar.Но это точно не то, что я хочу.Я хочу иметь хорошие чистые фляги и, в конце концов, когда программное обеспечение упаковано, log4j.properties будет находиться в каталоге conf, а каталог conf как-то будет в пути к классам.

Дополнительный вопрос: мой подход к решениюзагрузка конфига через classpath хороша?Я думаю, что хочу избежать проблем с различиями в пути разработки / производства.Когда я просто предполагаю, что конфиг будет на СР, тогда все станет намного проще.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Используйте maven-assembly-plugin для создания архивов, комбинируя зависимости, классы, src, ресурсы и артефакты по своему усмотрению.

1 голос
/ 16 марта 2011

Я прокомментирую последнюю часть о том, как загрузить файлы конфигурации. Размещение файлов конфигурации в classpath довольно широко используется в Java. Это хорошо работает, если конфигурация исправлена ​​во время развертывания, и файл может быть внедрен в jar, но по моему опыту это создает больше проблем, чем решает, если конфигурация будет изменена позже.

Есть в основном две причины для этого. Во-первых, это усложняет точную информацию о том, какой файл конфигурации действительно используется, и устраняет проблемы конфигурации. В путь к классам может быть включено несколько каталогов, могут быть файлы в jar (или в другом jar) и т. Д. Загрузка классов является одной из наиболее сложных тем в Java, а загрузка классов и classpath обычно является непрозрачной темой для тех, кто должен на самом деле изменить конфигурацию. Лучше иметь фиксированное местоположение в том месте, где должен находиться файл конфигурации, записать в файл журнала строку с этим местоположением и создать ошибку, если файл отсутствует.

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

Log4j дает вам возможность указать файл log4j в командной строке при запуске java. Я всегда использую эту опцию, чтобы указать точное местоположение для моего файла конфигурации log4j.

...