На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Maven и IDEA , Куча вопросов по зависимостям (возможно даже наркотическим)
    Всем привет)
    Вернулся я значит на java, вникал в Maven, Spring и прочие прелести java-мира, которые прошли мимо меня пока занимался шарпом и плюсами. Так же, начал осваивать IDEA, которая кажется очень непривычной, вроде как, тут есть многое, но, найти это довольно сложно, возможно, я слишком привязался к eclipse и vs, поэтому многие нововведения от IDEA для меня не очевидны.
    Почему то, мне довольно сложно искать конкретные ответы на вопросы по Maven-у, сейчас уже тонны различных статей, но, очень нужной информации либо нет, либо упоминается вскользь без разжёвываний. Я постарался собрать наиболее острые вопросы, и задать их тут, может wind, Данила или другие гуру примудростей java смогут мне помочь или натолкнуть на правильный путь, буду очень признателен!

    1. Maven.

    В мавене всё строится на pom-ника, которые подключают нам артефакты нужной версии. Пока у нас один pom.xml файл - тут всё довольно прозрачно, даже с учётом того что помник может содержать нечто на вроде переменных, какие то сложных конфигураций и т.д.

    ExpandedWrap disabled
      <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-ником, в наш проект вторгаются захватчики из параллельного мира и начинают чинить бедствия, смерти и разруху. В помниках появляются зависимости от зависимостей (так называемые, косвенные зависимости). Естественно, в наших проектах появляется один родительский помник и один дочерний. Дочерний помник знает о зависимостях родителя, обязан зависить от них и в этом проекте + свои зависимости.

    Родительский проект
    ExpandedWrap disabled
      <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>


    Дочерний проект
    ExpandedWrap disabled
      <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 + сторонние артефакты

    Представим такую ситуацию, у меня есть два проекта

    ExpandedWrap disabled
      <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>


    ExpandedWrap disabled
      <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? Может быть, нужно поставить какие то плагины?


    Почему то, мне кажется, что то что я спрашиваю решалось уже многими людьми, и ответ для них очевиден, поэтому надеюсь что вы подскажите как правильно решать всё эти перечисленные проблемы.
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0364 ]   [ 18 queries used ]   [ Generated: 28.03.24, 09:47 GMT ]