Как мы можем избежать ошибок загрузки классов во время выполнения? - PullRequest
0 голосов
/ 11 декабря 2018

При упаковке Java-проектов мы полагаемся на Maven, но я полагаю, что проблемы с Gradle или Ant одинаковы.Иногда мы сталкиваемся с проблемой, известной как «Jar Hell», если одна зависимость зависит от транзитивной зависимости в другой версии, чем другая зависимость, как часто встречающийся пример - guava.Если загруженная библиотека имеет конфликтующие пути к классам или функции, вы получите печально известные ClassNotFoundException или NoSuchMethodError во время выполнения.(«забавно», что одно исключение, а другое ошибка между прочим ^^)

Я знаю, что проблемы можно несколько решить с помощью dependencyManagement, используя Maven Shade Plugin иобнаружен с помощью плагина Enforcer, например, "Конвергенция зависимостей".Мне также известны многие вопросы, связанные с этими методами, например: SO Link .

Теперь мой вопрос: как мы можем обнаружить эти ошибки во время компиляции?Как я понимаю, сам java-компилятор javac на самом деле не имеет механизмов для упаковки приложений, но я бы предположил, что jar упаковщик, такой как shade, assembly или тому подобное, сможет обнаружить, все ликлассы и методы присутствуют?Очевидно, предполагая, что никакие классы не будут загружены во время выполнения.(Это касается нас, поскольку мы в основном создаем автономные приложения и не имеем дело с серверами приложений, такими как JBoss / Wildfly)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...