Пушыстый (_winnie) wrote,
Пушыстый
_winnie

Categories:

maven jar hell

maven теперь остался в том месте, где он хорошо справляется - разрешать зависимости библиотек, скачивать их из интернета, и исходники к ним качать.
К сожалению, даже тут он справляется на "хорошо", а не на "отлично". На 4 с плюсом, но не на 5.

Во-первых, когда при diamond-dependency-hell нужны библиотеки разных версий - он тупо выбирает самую большую, из-за этого возникают никогда не тестировавшиеся комбинации библиотек. Ну это ладно, похоже для java это неизбежное зло.

Во-вторых, мейтейнеры библиотек часто в библиотеках с разными именами используют одинаковые классы. Например, asm-3.1.jar в зависимостях hibernate и asm-all-3.3.1.jar.

В проекте используется три XML-парсера (org.xml.sax), лежащие в трёх следующих файлах, и выбирается рандомный из них. А они выдают разный порядок атрибутов из xml-тега, мля.
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/rt.jar
vendor/jars/xml-apis-1.3.04.jar
vendor/jars/gnujaxp-1.0.0.jar


Так же в проекте три штуки servlet-api, тоже выбирается непонятный рандомный.
./jars/gwt-user-2.0.3.jar
./jars/servlet-api-2.5-6.1.3.jar (зависимость jettty)
./jars/servlet-api-2.5.jar


и maven это автоматически разрулить не может, так как библиотеки имеют разное название (servlet-api-2.5 и servlet-api это разные названия, для первого версией считается 6.1.3).
Это типа мейтейнеры виноваты, а не maven, но это не избавляет от головной боли.

В-третьих, в мульти-модульном проекте maven резолвит библиотеки отдельно для каждого модуля. Поэтому если в модуле А используются библиотеки X1 и X2, а в модуле Б - X1 и X3, то в мультимодульном проекте будут использоваться сразу две X2 (для A) и X3 (для Б). Что означает к чертям результаты тестов, вне теста модуль при подключении к другому модулю будет работать по другому. Так как в runtime А получит в classpath X3 а не X2.


Tags: java, maven, soft-dev
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments