Почему многие проекты предлагают только исходный код и не имеют jar для загрузки?

#java #hadoop #apache-pig

#java #hadoop #apache-pig

Вопрос:

Я видел много проектов, даже от таких крупных компаний, как Elephant Bird (Twitter) и Akela (Mozilla), которые предлагают исходный код и просят вас скомпилировать его самостоятельно, вместо того, чтобы предлагать jars. Есть ли какая-то польза от компиляции в вашей собственной среде вместо того, чтобы просто загружать jar, скомпилированный кем-то другим?

Ответ №1:

  1. Зависимости находятся в разных местах или даже имеют одну и ту же версию на каждом компьютере. Проще определить, где они находятся во время компиляции.

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

Ответ №2:

Короткий ответ — управление зависимостями. Большинство общедоступных проектов OSS Java предлагают jar, публикуя их в Maven Central. Ожидается, что вы будете использовать систему сборки, такую как Gradle, Ivy или Maven, для управления вашими зависимостями — эти инструменты автоматически загрузят нужную вам библиотеку вместе с любой из ее зависимых библиотек и будут действовать разумно, кэшируя ее в вашей локальной файловой системе, поэтому, если библиотека является общей для нескольких библиотек, она не будет использоваться.загружается дважды.

Что касается примеров проектов, которые вы перечислили, Elephant Bird доступен через Maven Central, в то время как Akela точно расскажет вам, как создать свой собственный jar (возможно, это недостаточно далеко, чтобы оправдать прохождение процедуры публикации в Maven Central):

 Building

To make a jar you can do:

mvn package

To make a Hadoop MapReduce job jar with no defined main class in the manifest:

mvn assembly:assembly
  

Комментарии:

1. Я знаю, как создавать банки. Вопрос в том, почему. Ваш ответ применим, если мне все равно нужно использовать Java для проекта, но если мне просто нужен JAR для какого-то другого языка (например, Pig в примерах), зачем мне компилировать, а не просто загружать jar?

Ответ №3:

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