#java #hadoop #apache-pig
#java #hadoop #apache-pig
Вопрос:
Я видел много проектов, даже от таких крупных компаний, как Elephant Bird (Twitter) и Akela (Mozilla), которые предлагают исходный код и просят вас скомпилировать его самостоятельно, вместо того, чтобы предлагать jars. Есть ли какая-то польза от компиляции в вашей собственной среде вместо того, чтобы просто загружать jar, скомпилированный кем-то другим?
Ответ №1:
-
Зависимости находятся в разных местах или даже имеют одну и ту же версию на каждом компьютере. Проще определить, где они находятся во время компиляции.
-
Если в проекте есть какой-либо машинный код (иногда просто для оптимизации), вероятно, есть зависящие от платформы флаги, которые необходимо установить во время компиляции.
Ответ №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-файл, но для небольших проектов не всегда достаточно заморачиваться с его настройкой.