Exclusions will not help in this case.
Looking through the dependency hierarchy will at least get you to see
the problem earlier which I think was the nature of your question.
It appears from my brief reading and fun with making servlets run in
production that classloaders merge classes by name.
Maven does not.
I am a bit surprised that groupId does not count.
If one uses a lot of third -party libraries, it would seem inevitable
that you could need com.artifact-software:utilities:1.0 at the same time
as ch.rethab:utilities:1.0 at the same time.
The classloader is not going to cause any problem but if Maven throws
out one of these as a duplicate, you will be missing classes at run-time.
It is difficult to force everyone to create unique artifactIds unless
you get rid of the GroupId altogther and make GAV -> <AV> and put the
group name into the artifactID.
This seems to be a design flaw if it is true.
Ron
On 07/02/2014 9:43 AM, Reto Hablützel wrote:
Sure, but exclusions don't do the trick if you need both of them, do
they? I am talking about completely independent libraries that happen
to have the same artifactId.
Those were actually both libraries of mine and I could obviously fix
this issue rather simply, but I was just thinking that it would be
helpful to have at least a warning or something from maven -
regardless of the IDE.
- Reto
On Fri, Feb 7, 2014 at 3:33 PM, Ron Wheeler
<[email protected]
<mailto:[email protected]>> wrote:
If your IDE supports Maven (Eclipse/STS for example), you will see
the conflict in the dependency hierarchy view and you can fix it
with the right exclusions.
It is almost always worth a quick look through the dependency
hierarchy view if you use a lot of third party libraries.
Not everyone updates their dependencies when they build a
shareable library.
You can sometimes get some pretty old versions of things dragged
in with the latest version of otherwise well-written libraries.
Exclusions need to be added to get what you want in your artifacts.
Ron
On 07/02/2014 9:21 AM, Reto Hablützel wrote:
Hi there,
I built an ear using the maven-ear-plugin (version 2.6).
The ear is configured such that it includes two libraries into
the lib
folder, both with the same artifactId as well as the same
version, but a
different groupId. Now if I simply call 'mvn package' only the
first one is
included, but no warning whatsoever appears. Only once I turn
on debugging
(mvn --debug package), I see one subtle message:
[DEBUG] Skipping artifact [jar:com.foo:bar:1.0] as it is
already up to date
at [lib/bar-1.0.jar]
Wouldn't it make sense to either include the groupId in the
filename or at
least make a check (that includes the groupId) beforehand if
there are any
conflicts?
Cheers,
Reto
--
Ron Wheeler
President
Artifact Software Inc
email: [email protected]
<mailto:[email protected]>
skype: ronaldmwheeler
phone: 866-970-2435, ext 102
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
<mailto:[email protected]>
For additional commands, e-mail: [email protected]
<mailto:[email protected]>
--
Ron Wheeler
President
Artifact Software Inc
email: [email protected]
skype: ronaldmwheeler
phone: 866-970-2435, ext 102