Как укротить проект с помощью Eclipse и IvyDE вместе со сценариями оболочки, чтобы упростить разработку, сборку и публикацию?

Я рассматривал проект веб-приложения, который использует комбинацию Ivy во время разработки и набор сценариев оболочки для ручного запуска приложения с использованием исполняемого файла java во время выполнения и путем указания жестко запрограммированного пути к классу. . Исходя в основном из опыта работы с .NET/NuGet и имея некоторый опыт работы с некоторыми другими менеджерами пакетов, такими как NPM, Ruby Gems, Rust cargo, мне интересно, где такие же инструменты командной строки для Java. Я использовал java -jar ivy.jar, но кажется, что это только разрешает/устанавливает зависимости глобально, как насчет создания, запуска и, в конечном итоге, публикации приложения?

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


person jpierson    schedule 09.10.2015    source источник
comment
Обычно вы используете Ivy с Ant (вместо сценариев оболочки), и лучшей альтернативой будет замена обоих на Maven. Возможно, этот вопрос будет вам интересен.   -  person Fred Porciúncula    schedule 09.10.2015
comment
Maven является стандартом де-факто.   -  person lexicore    schedule 09.10.2015
comment
Maven действительно является своего рода стандартом, но в настоящее время Gradle догоняет его как серьезную альтернативу без xml. Оба потрясающие по-своему.   -  person Gimby    schedule 09.10.2015
comment
Спасибо, Иветт. Я немного переформулировал вопрос. Первоначально я пытался говорить в общих чертах, чтобы не раскрывать личную информацию, с которой я не мог столкнуться. Какой инструмент лучше? тип вопроса. Меня интересуют все решения для избыточной конфигурации и необходимости сборки Eclipse.   -  person jpierson    schedule 15.10.2015


Ответы (2)


Во время сборки есть такие инструменты, как Maven. и Gradle. Они разрешают ваши зависимости, и инструмент строит график зависимостей, чтобы определить необходимые транзитивные зависимости. И Maven, и Gradle представляют зависимости в направленном ациклическом графе, но DAG Maven гораздо более ограничен, чем Gradle. Maven очень декларативный, указанный в XML, и очень подходит нам или шоссе. Gradle очень гибок, со сценариями сборки, указанными как программы Groovy. Вот сравнение по функциям (с уклоном в сторону Gradle).

Что касается Maven, все, что вам нужно сделать, это:

mvn clean install

Если вы хотите визуализировать граф зависимостей:

mvn dependency:tree

Во время выполнения это другая история.

Обычно приложения Java объединяются в файлы WAR или EAR. Это прославленные ZIP-файлы, содержащие приложение и все его зависимости. Файл WAR в распакованном виде выглядит так:

+-+ WEB-INF
| |
| +-- classes
| |    \_ application specific classes
| +-- lib
| |    \_ bundled JAR files for required dependencies
| +-- web.xml
|      \_ main web application configuration
+-- ... web assets

Файлы WAR и EAR развертываются на сервере приложений (Tomcat, JBoss и т. д.), который управляет общими зависимостями между приложениями.

За пределами серверов приложений это немного сложно. Самый простой подход — установить приложение в виде исполняемого файла JAR со всеми его зависимостями, установленными вместе с ним. Файлы JAR могут иметь файл "MAINFEST.MF", включенный в это список всех зависимых JAR-файлов. Инструмент сборки, такой как Maven, автоматически настроит JAR для ссылки на его зависимости и упакует приложение и его зависимости в ZIP-файл (см. плагин сборки Maven).

Другим подходом является так называемый «толстый JAR» или «uber-JAR», который представляет собой JAR, содержащий другие JAR, или основной JAR просто содержит развернутое содержимое JAR зависимостей (см. плагин Maven Shade).

Наконец, есть OSGi, который управляет зависимостями во время выполнения. OSGi — это открытый стандарт, реализуемый такими контейнерами, как Apache Felix или Eclipse Equinox. Вот идея того, как настроить приложение Eclipse Equinox. Вы разрабатываете свое приложение как «плагин» в одной из этих сред. Но, как приятное преимущество, вы можете управлять несколькими версиями зависимостей и даже получать автообновление.

person sh0rug0ru    schedule 09.10.2015
comment
Интересно, я тоже слышал о Gradle раньше, но не знал, что это инструмент сборки. Я посмотрю на это и посмотрю, приведет ли это меня к чему-нибудь. На данный момент я пытаюсь адаптировать этот проект, чтобы обеспечить более удобную в сопровождении автоматизацию сборки и лучший опыт разработчиков, но я не хочу менять вещи слишком далеко от используемых корневых технологий. В то же время я все еще пытаюсь понять, сколько инструментов задействовано и что делает каждый инструмент. - person jpierson; 09.10.2015

Вы смотрели на Maven в своих поисках?

Он заполняет аспект управления пакетами, а также некоторые другие, такие как сборка, тестирование. https://maven.apache.org/

person Devon Burriss    schedule 09.10.2015
comment
Я столкнулся с maven, но я не понимал, что это также инструмент сборки. Я предполагаю, что мой вопрос будет заключаться в том, что если это инструмент сборки и менеджер зависимостей, то каковы совпадения с файлами IDE .project и т.п. Они хорошо играют вместе без дублирования? Для конкретного проекта, над которым я работаю, кажется, что Ivy является стандартом и что существуют настраиваемые репозитории, которые используются. Я не уверен, будет ли Maven слишком радикальным изменением того, что уже есть. - person jpierson; 09.10.2015