How does Maven resolve plugin versions?

后端 未结 3 1787
难免孤独
难免孤独 2021-02-19 00:49

I\'m reading the docs and still confused as to how Maven is deciding which versions of plugins to download.

For example, consider this simple scenario:

  1. an
相关标签:
3条回答
  • 2021-02-19 01:33

    Every version of Maven binaries has certain versions of plugin versions hardcoded. That's to make a somewhat reproducible build in the cases when user doesn't provide his own version information. Which you are encouraged to do and once you populate <pluginManagement> section with the plugin versions of your choice, the build will start using it.

    0 讨论(0)
  • 2021-02-19 01:43

    Maven defines 3 lifecycles in META-INF/plexus/components.xml:

    1. Default Lifecycle

    Default lifecycle are defined without any associated plugin. Plugin bindings for these lifecycles are defined separately for every packaging in META-INF/plexus/default-bindings.xml

    e.g. Plugin bindings for jar packaging

    <phases>
      <process-resources>
        org.apache.maven.plugins:maven-resources-plugin:2.6:resources
      </process-resources>
      <compile>
        org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile
      </compile>
      <process-test-resources>
        org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
      </process-test-resources>
      <test-compile>
        org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile
      </test-compile>
      <test>
        org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
      </test>
      <package>
        org.apache.maven.plugins:maven-jar-plugin:2.4:jar
      </package>
      <install>
        org.apache.maven.plugins:maven-install-plugin:2.4:install
      </install>
      <deploy>
        org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
      </deploy>
    </phases>
    

    2. Clean Lifecycle clean lifecycle is defined directly with its plugin bindings.

    <phases>
      <phase>pre-clean</phase>
      <phase>clean</phase>
      <phase>post-clean</phase>
    </phases>
    <default-phases>
      <clean>
        org.apache.maven.plugins:maven-clean-plugin:2.5:clean
      </clean>
    </default-phases>
    

    3. Site Lifecycle Site lifecycle is defined directly with its plugin bindings.

    <phases>
      <phase>pre-site</phase>
      <phase>site</phase>
      <phase>post-site</phase>
      <phase>site-deploy</phase>
    </phases>
    <default-phases>
      <site>
        org.apache.maven.plugins:maven-site-plugin:3.3:site
      </site>
      <site-deploy>
        org.apache.maven.plugins:maven-site-plugin:3.3:deploy
      </site-deploy>
    </default-phases>
    

    If you want to override these default plugin version you can do it from command prompt as follows

    mvn org.apache.maven.plugins:maven-clean-plugin:2.0:clean
    

    instead of

    mvn clean:clean
    
    0 讨论(0)
  • 2021-02-19 01:46

    It becomes quite clear if you use -X option when building your projects. Please, check my answer in another thread: https://stackoverflow.com/a/48874533/4470135

    0 讨论(0)
提交回复
热议问题