Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.38.80] |
|
Сообщ.
#1
,
|
|
|
Всем привет)
Вернулся я значит на java, вникал в Maven, Spring и прочие прелести java-мира, которые прошли мимо меня пока занимался шарпом и плюсами. Так же, начал осваивать IDEA, которая кажется очень непривычной, вроде как, тут есть многое, но, найти это довольно сложно, возможно, я слишком привязался к eclipse и vs, поэтому многие нововведения от IDEA для меня не очевидны. Почему то, мне довольно сложно искать конкретные ответы на вопросы по Maven-у, сейчас уже тонны различных статей, но, очень нужной информации либо нет, либо упоминается вскользь без разжёвываний. Я постарался собрать наиболее острые вопросы, и задать их тут, может wind, Данила или другие гуру примудростей java смогут мне помочь или натолкнуть на правильный путь, буду очень признателен! 1. Maven. В мавене всё строится на pom-ника, которые подключают нам артефакты нужной версии. Пока у нас один pom.xml файл - тут всё довольно прозрачно, даже с учётом того что помник может содержать нечто на вроде переменных, какие то сложных конфигураций и т.д. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ru.my.project</groupId> <artifactId>MyProject</artifactId> <version>1.0.0.0</version> <dependencies> <dependency> <!-- Добавляем зависимость от одной библиотеки --> <groupId>ru.test</groupId> <artifactId>test</artifactId> <version>1.0.0.0</version> </dependency> </dependencies> </project> Но, как только мы создаём второй зависимый проект, со своим вторым pom-ником, в наш проект вторгаются захватчики из параллельного мира и начинают чинить бедствия, смерти и разруху. В помниках появляются зависимости от зависимостей (так называемые, косвенные зависимости). Естественно, в наших проектах появляется один родительский помник и один дочерний. Дочерний помник знает о зависимостях родителя, обязан зависить от них и в этом проекте + свои зависимости. Родительский проект <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <groupId>ru.my.project</groupId> <artifactId>MyProject</artifactId> <version>1.0.0</version> <dependencies> <dependency> <!-- Добавляем зависимость от одной библиотеки --> <groupId>ru.test</groupId> <artifactId>test</artifactId> <version>1.0.0</version> </dependency> </dependencies> </project> Дочерний проект <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <groupId>ru.my.project</groupId> <artifactId>MyProject</artifactId> <version>1.0.0</version> </parent> <groupId>ru.my.module1</groupId> <artifactId>MyModule1</artifactId> <version>1.0.0</version> <dependencies> <!-- У нас уже есть косвенная зависимость от ru.test --> </dependencies> </project> И тут я не понимаю как правильно нужно поступать. Нужно ли как то обозначать подобную косвенную зависимость? Как это сделать - добавлять ту же зависимость, но без версии, а в родительском помнике оставлять версию? 2. Maven + сторонние артефакты Представим такую ситуацию, у меня есть два проекта <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <groupId>ru.my.project</groupId> <artifactId>MyProject</artifactId> <version>1.0.0</version> <dependencies> <dependency> <!-- Добавляем зависимость от одной библиотеки --> <groupId>ru.test</groupId> <artifactId>test</artifactId> <version>1.0.0</version> <!-- Версия 1.0.0 --> </dependency> </dependencies> </project> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <groupId>ru.my.project</groupId> <artifactId>MyProject</artifactId> <version>1.0.0</version> </parent> <groupId>ru.my.module1</groupId> <artifactId>MyModule1</artifactId> <version>1.0.0</version> <dependencies> <dependency> <!-- Добавляем зависимость от одной библиотеки --> <groupId>ru.test</groupId> <artifactId>test</artifactId> <version>2.0.1</version> <!-- Версия 2.0.1 --> </dependency> </dependencies> </project> Если бы я работал в Visual Studio на шарпе, я бы сразу пошёл в свойства солюшена, и начал бы делать Consolidation решения Прикреплённая картинка
Прикреплённая картинка
Где я увидел бы что у меня есть одна библиотека, которая используется в двух проектах, однако, в одном проекте она одной версии, во втором проекте - совершенно другой. Далее я привошу библиотеку во всех проектах что её используют к одной версии (как правило, к наибольшей), и таким образом, избавляюсь от кучи потенциальных проблем. Нужно ли делать подобное в Maven? Есть ли у Maven средства для анализа и консолидации одинаковых зависимостей разных версий? Можно ли подобное делать средствами IDEA? 3. Maven + сторонние артефакты + косвенные зависимости у сторонних артефактов Буквально сегодня я узнал о таком термине как JAR-Hell, если я правильно его понял (прошу поправить если что), суть заключается в косвенных зависимостях подключаемых артефактов. Например, в IDEA у плагина Maven, есть такой интересный инструмент "Show Dependencies...", который анализирует зависимости (почему то, я вижу только зависимости у артефактов, но не вижу зависимости между своими проектами), и на основнии анализа, строит граф, в котором показывает ошибки (цикличные зависимости, или использование разных версий артефакта внутри артефактов). Прикреплённая картинка
Он действительно находит разные версии артефактов, однако, делает он это, почему то, в моём локальном репозитории, вместо того, чтобы подсказывать как мне правильно делать зависимости в моих помниках. Подскажите, нужно ли как то исправлять то что я вижу на этой картине (красные стрелочки)? Как мне сделать подобную консолидацию между моими десятками помников? Есть ли встроенные средства для этого в Maven/IDEA? Может быть, нужно поставить какие то плагины? Почему то, мне кажется, что то что я спрашиваю решалось уже многими людьми, и ответ для них очевиден, поэтому надеюсь что вы подскажите как правильно решать всё эти перечисленные проблемы. |