Может ли плагин быть определен как зависимость в Maven POM?

#maven #automation

#maven #автоматизация

Вопрос:

Привет, я новичок в сообществе stackoverflow, я изучаю maven с точки зрения автоматизации. Здесь, если я добавлю плагин maven surefire_report в качестве зависимости в POM, я получу

 Exception in thread "main" java.lang.NoSuchMethodError: 'void com.google.common.base.Preconditions.checkState(boolean, java.lang.String, java.lang.Object, java.lang.Object, java.lang.Object)'
  

Но он отлично работает, когда я упоминаю то же самое в тегах плагина. Итак, я хотел понять

  1. Есть ли у них какие-то правила для того, что можно определить как плагин, а что — как зависимость в POM?

  2. Возможно ли вообще определить плагин как зависимость каким-либо образом, как если бы упоминался плагин maven surefire в зависимости, он каждый раз работает нормально?

              <dependencies>
         <dependency>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <version>3.0.0-M5</version>
             <type>maven-plugin</type>
     </dependency>
    
     <dependency>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-report-plugin</artifactId>
         <version>3.0.0-M4</version>
         <type>maven-plugin</type>
     </dependency>
     <!-- https://mvnrepository.com/artifact/junit/junit -->
     <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.13</version>
         <scope>test</scope>
     </dependency>
     <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
     <dependency>
         <groupId>org.seleniumhq.selenium</groupId>
         <artifactId>selenium-java</artifactId>
         <version>4.0.0-alpha-5</version>
     </dependency>
      

    2.3.2

    org.apache.maven.plugins
    maven-compiler-plugin
    ${maven-compiler-plugin-version}

    1.8
    1.8

Комментарии:

1. Использование плагина в качестве зависимости обычно не имеет смысла, потому что вы не используете код плагина в своем собственном коде. Определение плагина в тегах плагинов делает sense…to определите, какие плагины и в какой версии используются.

Ответ №1:

Зависимости — это те артефакты, которые ваша программа будет использовать для компиляции и выполнения.

Плагины — это другой вариант. Они запускаются во время сборки, например, для обработки ресурсов, запуска тестов и т. Д.

Таким образом, использование плагина surefire в качестве зависимости означает, что вы хотите использовать его в своей программе (не во время сборки). И это, вероятно, не то, что вы хотите.