Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should you include those dependencies in your pom that are already the dependencies of some of your dependencies?

Say there are two dependencies you need: A and B. And at the same time A is already a dependency of B. So do you still want/need to add A along with B as dependencies in your pom?

I believe this may be needed when A and B are external libraries where the version of A needed may be different than the version of A that B is depending on.

But how about when both your module and A and B are modules in the same project? i.e. knowing their versions are all going to be in sync.

like image 688
user1589188 Avatar asked Nov 08 '18 00:11

user1589188


People also ask

Why we need to add dependencies in pom xml?

The way it works is that it allows you to define dependencies to external libraries that your project needs, and when you use Maven to build your project it will fetch these libraries from the web (external repositories) and add them to your built project. So it's an automatic handling of dependencies.

Where should I place dependencies in pom xml?

Open the pom. xml file. under the project tag add <dependencies> as another tag, and google for the Maven dependencies.

How do I add dependencies to an existing project?

If you are using STS or Eclipse for your development then you can easily add dependencies using CLI . You need to press the Ctrl+Space Bar in your pom. xml . Save this answer.


1 Answers

If your module uses APIs from B it's best practice to add it explicitly to your pom, even though it's not strictly necessary. If you upgrade A, it could well be that it doesn't use B anymore and then you'll get a build failure without any changes to your module code.

Regarding versions, you should manage those with dependencyManagement in a parent pom. You can then skip the version for the managed dependencies in the child poms. The version in the dependencyManagement overrides the version in transitive dependencies, ensuring you use the same version everywhere.

If all modules are in the same project, they should also share the same project version. Typically, this will be a snapshot version, e.g. 1-SNAPSHOT

Each module will use something like:

<project>
  <artifactId>A</artifactId>
  <version>1-SNAPSHOT</version>

And refer to A and B like this in other modules:

<dependency>
  <groupId>com.yourcompany</groupId>
  <artifactId>A</artifactId>
  <version>${project.version}</version>
</dependency>

To set a non-SNAPSHOT version before you build a release, you can for example use the maven-dependency-plugin's versions:set goal.

like image 158
gjoranv Avatar answered Nov 15 '22 05:11

gjoranv