<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419363&amp;view=findpost&amp;p=3836544</guid>
        <pubDate>Fri, 14 Aug 2020 11:02:27 +0000</pubDate>
        <title>Maven и IDEA</title>
        <link>https://forum.sources.ru/index.php?showtopic=419363&amp;view=findpost&amp;p=3836544</link>
        <description><![CDATA[VisualProg: Всем привет)<br>
Вернулся я значит на java, вникал в Maven, Spring и прочие прелести java-мира, которые прошли мимо меня пока занимался шарпом и плюсами. Так же, начал осваивать IDEA, которая кажется очень непривычной, вроде как, тут есть многое, но, найти это довольно сложно, возможно, я слишком привязался к eclipse и vs, поэтому многие нововведения от IDEA для меня не очевидны.<br>
Почему то, мне довольно сложно искать конкретные ответы на вопросы по Maven-у, сейчас уже тонны различных статей, но, очень нужной информации либо нет, либо упоминается вскользь без разжёвываний. Я постарался собрать наиболее острые вопросы, и задать их тут, может wind, Данила или другие гуру примудростей java смогут мне помочь или натолкнуть на правильный путь, буду очень признателен&#33;<br>
<br>
1. Maven.<br>
<br>
В мавене всё строится на pom-ника, которые подключают нам артефакты нужной версии. Пока у нас один pom.xml файл - тут всё довольно прозрачно, даже с учётом того что помник может содержать нечто на вроде переменных, какие то сложных конфигураций и т.д.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;modelVersion&#62;4.0.0&#60;/modelVersion&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;groupId&#62;ru.my.project&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;artifactId&#62;MyProject&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;version&#62;1.0.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;dependency&#62; &#60;!-- Добавляем зависимость от одной библиотеки --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;groupId&#62;ru.test&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;artifactId&#62;test&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;version&#62;1.0.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/dependency&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&#60;/project&#62;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<br>
Но, как только мы создаём <strong class='tag-b'>второй зависимый проект</strong>, со своим вторым pom-ником, в наш проект вторгаются захватчики из параллельного мира и начинают чинить бедствия, смерти и разруху. В помниках появляются зависимости от зависимостей (так называемые, <strong class='tag-b'>косвенные зависимости</strong>). Естественно, в наших проектах появляется один родительский помник и один дочерний. Дочерний помник знает о зависимостях родителя, обязан зависить от них и в этом проекте + свои зависимости.<br>
<br>
Родительский проект<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;groupId&#62;ru.my.project&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;artifactId&#62;MyProject&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;dependency&#62; &#60;!-- Добавляем зависимость от одной библиотеки --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;groupId&#62;ru.test&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;artifactId&#62;test&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/dependency&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&#60;/project&#62;</div></ol></div></div></div></div><br>
<br>
Дочерний проект<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;parent&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;groupId&#62;ru.my.project&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;artifactId&#62;MyProject&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/parent&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;groupId&#62;ru.my.module1&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;artifactId&#62;MyModule1&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;dependencies&#62; &#60;!-- У нас уже есть косвенная зависимость от ru.test --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&#60;/project&#62;</div></ol></div></div></div></div><br>
<br>
И тут я не понимаю как правильно нужно поступать.<br>
Нужно ли как то обозначать подобную косвенную зависимость? Как это сделать - добавлять ту же зависимость, но без версии, а в родительском помнике оставлять версию?<br>
<br>
2. Maven + сторонние артефакты<br>
<br>
Представим такую ситуацию, у меня есть два проекта<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;groupId&#62;ru.my.project&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;artifactId&#62;MyProject&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;dependency&#62; &#60;!-- Добавляем зависимость от одной библиотеки --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;groupId&#62;ru.test&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;artifactId&#62;test&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62; &#60;!-- Версия 1.0.0 --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/dependency&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&#60;/project&#62;</div></ol></div></div></div></div><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;parent&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;groupId&#62;ru.my.project&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;artifactId&#62;MyProject&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/parent&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;groupId&#62;ru.my.module1&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;artifactId&#62;MyModule1&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;version&#62;1.0.0&#60;/version&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;dependency&#62; &#60;!-- Добавляем зависимость от одной библиотеки --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;groupId&#62;ru.test&#60;/groupId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;artifactId&#62;test&#60;/artifactId&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;version&#62;2.0.1&#60;/version&#62; &#60;!-- Версия 2.0.1 --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/dependency&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/dependencies&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&#60;/project&#62;</div></ol></div></div></div></div><br>
<br>
Если бы я работал в Visual Studio на шарпе, я бы сразу пошёл в свойства солюшена, и начал бы делать Consolidation решения<br>
<span class="b-attach" data-size="18164" data-hits="5219" data-attach-id="62445" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=62445' title='Скачать файл' target='_blank'>screen1.png</a> (, : 5219)
		</span><br>
<span class="b-attach" data-size="28431" data-hits="5118" data-attach-id="62446" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=62446' title='Скачать файл' target='_blank'>screen2.png</a> (, : 5118)
		</span><br>
<br>
Где я увидел бы что у меня есть одна библиотека, которая используется в двух проектах, однако, в одном проекте она одной версии, во втором проекте - совершенно другой. Далее я привошу библиотеку во всех проектах что её используют к одной версии (как правило, к наибольшей), и таким образом, избавляюсь от кучи потенциальных проблем.<br>
<br>
Нужно ли делать подобное в Maven? Есть ли у Maven средства для анализа и консолидации одинаковых зависимостей разных версий? Можно ли подобное делать средствами IDEA?<br>
<br>
3. Maven + сторонние артефакты + косвенные зависимости у сторонних артефактов<br>
<br>
Буквально сегодня я узнал о таком термине как JAR-Hell, если я правильно его понял (прошу поправить если что), суть заключается в косвенных зависимостях подключаемых артефактов. Например, в IDEA у плагина Maven, есть такой интересный инструмент &quot;Show Dependencies...&quot;, который анализирует зависимости (почему то, я вижу только зависимости у артефактов, но не вижу зависимости между своими проектами), и на основнии анализа, строит граф, в котором показывает ошибки (цикличные зависимости, или использование разных версий артефакта внутри артефактов).<br>
<br>
<span class="b-attach" data-size="149341" data-hits="5022" data-attach-id="62447" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=62447' title='Скачать файл' target='_blank'>screen3.png</a> (, : 5022)
		</span><br>
<br>
Он действительно находит разные версии артефактов, однако, делает он это, почему то, в моём локальном репозитории, вместо того, чтобы подсказывать как мне правильно делать зависимости в моих помниках.<br>
Подскажите, нужно ли как то исправлять то что я вижу на этой картине (красные стрелочки)? Как мне сделать подобную консолидацию между моими десятками помников? Есть ли встроенные средства для этого в Maven/IDEA? Может быть, нужно поставить какие то плагины?<br>
<br>
<br>
Почему то, мне кажется, что то что я спрашиваю решалось уже многими людьми, и ответ для них очевиден, поэтому надеюсь что вы подскажите как правильно решать всё эти перечисленные проблемы.]]></description>
        <author>VisualProg</author>
        <category>Java</category>
      </item>
	
      </channel>
      </rss>
	