Hi community,

I am interested in your strategy, how to use Maven to make sure, all artifacts are selected in the right version.

By default, if you add a dependency with it's version, that is only a wish. Maven is allowed to change the artifact to a newer or an older version. It depends on the dependency tree and the distance to the root. (see: http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-project-dependencies.html#pom-relationships-sect-version-ranges)

As a consequence, sometimes my war file contains libs which do not fit together. The following solutions I've figured out so far: 1.Declare all needed dependencies in the pom of the war file. Disadvantage: I have to do the work manually. 2.Use Dependency Management. In my parent pom I can declare all dependencies and their versions. Advantage: I have full control of the dependencies in the child moduls. Disadvantage: If I need to change a version of a particular dependency, I need to release a new version of the parent pom and afterwards I have to update the version number in all child projects which need the new version of the dependency. 3.Use Version Ranges. Advantage: With version ranges I can add more specific informations for Maven. This is used to support the conflict resolution and maven only selects artifacts which satisfy all version ranges. Advantage: conflict resolution does not cause (binary) incompatibilty between the artifacts, if the version ranges are set correct. Disadvantage: There is more effort during the release process: you need to build a release pom with resolved version ranges to make the build repeatable. You have to hide Snapshots during the release process, if you use boundaries like [4.0,). And finally, maven needs additional meta data from the repository. If the meta data are not up to date, strange behaviour can happen. 4.Use only snapshots. If I use only snapshot versions, the latest version is always used. Disadvantage: Developing against snapshots can be frustrating because of the nature of snapshots ;-) But you will find out very fast, if something is binary incompatible.

So, I am very interested in the best practise! How do you solve the problem to manage all dependencies in their correct version. Thank you for your suggestions in advance.

Mario

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to