2016-03-01 5 views
-2

Я привык к таким инструментам, как композитор и npm и bower, где мне нужны мои зависимости из централизованных хранилищ. (И для ruby ​​есть bundler, и у python есть pip.)Как требовать зависимости в Java?

В настоящее время, хотя я работаю с файлами jar, и процесс их настройки кажется яростным. Мне нужно загрузить их, настроить их в проекте (я использую IntelliJ IDEA, но он будет похож на eclipse или netbeans).

Я ищу способ просто сказать «потребовать библиотеку x в версии y» и иметь команды для их установки и обновления.

Кажется, что maven или gradle выполняют некоторые из этих работ, но я немного смущен, поскольку они описываются как инструменты сборки.

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

Существует ли такое централизованное хранилище? Что такое де-факто стандарт? (Используется большинством людей, т. Е. Композитор сделал грушу устаревшей) и как бы я ее настроил?

Что более подходит для управления зависимостями и как я могу это сделать?

+0

Этот вопрос является слишком широким или ищет внешние указатели (документация, учебники) или основанное на мнениях (вы даже можете использовать Ivy, а не maven), в любом из трех случаев, имеющих право на закрытие –

+2

Вопреки javascript, вы необходимо скомпилировать и создать Java-приложения, что является хорошей причиной для управления построением и зависимостями в одном и том же инструменте. И интеграция с большинством IDE хороша (или достаточно хороша), поэтому она даже не мешает. –

ответ

2

Давайте начнем с простого вопроса: есть центральный репозиторий, где (почти) все можно найти: http://search.maven.org/ В некоторых компаниях также размещается собственный репозиторий. Например, JBoss.

Существует также Sonatype repository, если вы хотите разместить программное обеспечение с открытым исходным кодом самостоятельно.

Репозиторий - это простая файловая структура, содержащая файлы jar и некоторые метаданные XML. Макет происходит из мира maven, но почти любая система сборки java имеет некоторый способ получить артефакты из центра maven.

Полное разрешение зависимостей немного отличается от того, что вы знаете от npm. Там каждый пакет, на который вы зависите, имеет свои зависимости. Некоторые из них могут конфликтовать. В java-мире эти переходные зависимости должны быть сопоставлены - необходимо определить общую версию. Обычно это делается системой сборки. Таким образом, ваше «требование» - это зависимость, которая означает, что jar закончится в пути к классам, и поэтому классы будут доступны для вашего кода. В этом процессе нет динамических изменений (добавление баннеров в путь к классам после запуска jvm).

Зависимости настраиваются в файле pom.xml (если вы используете maven) файл build.gradle (если вы идете в сторону градуса). Существует также sbt или Ivy + Ant.

Обычно ваша система разрешения артефактов также запускает сборку. Это имеет смысл, поскольку вам необходимо определить путь к классу для компиляции ваших java-источников. Если вы будете использовать эти инструменты только для копирования этих файлов jar, вам все равно нужно найти способ передать все это в компилятор. Что скучно после третьей зависимости.

Maven поставляется с условным обозначением по разделу конфигурации. См. 5 Minute tutorial. Интеллектуальная интеграция очень хороша.

Gradle использует Groovy (язык сценариев на основе java vm) для достижения аналогичных целей, но более открыт для того, что происходит. Но это усложняет интеграцию и IDE - в зависимости от того, насколько вы креативны со своими сборками. gradle user guide - неплохое место для начала.

Существует также Ant + Ivy. Ant - это простая система сборки, в которой вы определяете задачи. Плющ добавляет к нему зависимость.

Никогда не упоминал об этом: sbt (в основном из мира Scala) или leiningen (в основном clojure) - все языки на основе JVM.

Моя рекомендация была бы maven - для этого требуется простой pom.xml, где вы можете добавить зависимости - компиляция будет запущена из коробки, если вы будете следовать ее структуре структуры каталогов, что довольно часто встречается в мире java. И большинство IDE будут работать. Если ваша сборка требует более сложных шагов сборки, у gradle есть хороший путь миграции.

В этом 5-минутном учебном пособии используется архетип (шаблон проекта в maven), чтобы вы начали. Если вы это сделали, вы сможете просто открыть эту папку в IntelliJ и продолжить оттуда.

0

Да, есть такой централизованный репозиторий (Maven Central). Используйте Maven.

Apache Maven - это инструмент управления и понимания программного обеспечения. Основываясь на концепции объектной модели проекта (POM), Maven может управлять сборкой проекта, отчетами и документацией из центральной части .

0

Maven делает именно это. Это полный инструмент построения, управление зависимостями - одна из частей. maven использует центральный репозиторий, вы можете иметь свой собственный или использовать любое репо.

0

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

В конце концов вы захотите создать приложение в любом случае, так почему бы не использовать систему сборки, которая поддерживает управление зависимостями? Есть и чистые менеджеры зависимостей (например, Apache Ivy), но почему бы не использовать полноценный инструмент построения, упрощающий интеграцию?

Существует ли такое централизованное хранилище? Что такое де-факто стандарт? (Используется большинством людей, т. Е. Композитор сделал грушу устаревшей) и как бы я ее настроил?

Есть несколько централизованных хранилищ, один из наиболее распространенных является Maven Central

Что больше подходит для управления зависимостями и как бы я сделать это?

Вы можете использовать любой инструмент построения, который соответствует вашим потребностям и поддерживает это. 3 из них - Maven, Apache Ivy и Gradle. Просто выберите один и прочитайте его документ.