Перекомпиляция зависимостей с Maven - возможно? Повышение производительности?

Я думал о зависимостях в Maven. Maven загружает их, но неизвестно, для какой целевой версии JVM они скомпилированы и с каким компилятором. Это вызывает два вопроса:

  • Приведет ли перекомпиляция зависимостей к более быстрым библиотекам зависимостей? Я попытался найти это, но не нашел достаточного ответа. Я обнаружил, что для 1.6 существует проверка разделения байт-кода, которая выполняется при компиляции с цель 1.6.
    Также есть вопрос Относятся ли улучшения производительности Java 6 к JDK, JVM или обоим?, где упоминается, что более новые версии javac могут генерировать более оптимизированный код.
  • Можно ли с помощью Maven выполнить перекомпиляцию зависимых библиотек? Можно ли настроить Maven для загрузки источников, поместить туда информацию о цели 1.6 и выполнить чистую установку mvn? < br> Мне известно о подключаемом модуле Maven Dependency и dependency: sources цель. Его можно использовать для загрузки исходного кода.
    Также существует подключаемый модуль Maven Replacer позволяющий заменять текст в файлах. Как указано в его проблеме 58, возникла реализовал поддержку XPath для него.
    Можно ли будет реализовать его с этими плагинами для зависимости, а также для его зависимостей, чтобы выполнять это? Я не уверен, как это сделать с зависимостями - возможно, с плагином Maven Replacer, вводящим конфигурацию в распакованные зависимости pom.xml?
    Или есть более простой способ настроить целевую версию Java с профилем сборки в пользователя settings.xml, который будет иметь приоритет над настройками проекта и, следовательно, избежать изменения pom.xml?

person Aries    schedule 15.01.2012    source источник


Ответы (2)


javac практически не оптимизируется, и те, что были там с самых первых дней. (И даже может считаться историческим). Если у вас есть код, созданный с помощью Java 1.0, вы можете найти улучшения, но все, что было за последние десятки лет, вероятно, будет таким же оптимальным в байтовом коде, как и сегодня.

Большая часть оптимизации выполняется в самой JVM, и вы должны обнаружить, что Java 6 update 30 работает быстрее, чем Java 6 update 0, даже для точно такого же кода.

person Peter Lawrey    schedule 15.01.2012

Давайте на мгновение задумаемся, что такое зависимость Maven. В самом общем смысле это программа, разработанная кем-то другим и живущая в собственном жизненном цикле, которая:

  • запакован в архив,
  • который существует в репозитории
  • под дескриптором версии (группа, артефакт, версия).

Это все, что гарантирует Maven. Обратите внимание, что он даже не говорит, что это Java (например, это могут быть ресурсы или собственные библиотеки). Немного. Слишком мало, чтобы требовать автоматической перекомпиляции зависимостей.

person MaDa    schedule 16.01.2012
comment
Это хороший момент. Я знаю, что пакет с ресурсами не влияет на производительность. Я рассматривал случай скомпилированных java-библиотек, есть ли способ их перекомпилировать и принудительно установить целевую версию java на 1.6 (если это будет иметь какое-либо значение). Я думаю об этом как о системе сборки пакетов Linux. Можно скомпилировать пакеты, но, безусловно, могут быть пакеты, содержащие, например, документация, не влияющая на производительность. - person Aries; 16.01.2012