Declare dependency in section even if dependency not used everywhere?

后端 未结 6 609
醉酒成梦
醉酒成梦 2021-01-31 10:23

We\'re using maven 2.1.0. I have multiple modules that are completely separate, but still have many common dependencies. Like log4J, but some modules don\'t need it. I am wond

6条回答
  •  误落风尘
    2021-01-31 11:16

    I wrote up a list of best practices. Here are the most important ones.

    • Always use the maven-enforcer-plugin
      • Enforce dependency convergence
        • Otherwise it's possible that you depend on two different jars which both depend on log4j. Which one gets used at compile time depends on a set of rules that you shouldn't have to remember. They can both (!) get exported as transitive dependencies.
      • Require plugin versions (for all plugins, even the built in ones)
        • Define them in pluginManagement in the parent pom to define versions
        • Otherwise a new version of maven-surefire-plugin could break your build
    • Use dependencyManagement in the parent pom to use versions consistently across all modules
    • Periodically run mvn dependency:analyze
      • It's possible that you're getting a dependency transitively that you directly depend on at compile time. If so, it's important to add it to your pom with the version you require. This plays nicely with the enforcer plugin.
      • It's possible that you're declaring extra dependencies that you don't use. This doesn't work properly 100% of the time, especially with libraries that are designed to have optional pieces (i.e. slf4j-api gets detected properly, but slf4j-log4j12 fails).

提交回复
热议问题