Well. The reason for using different version of libjar is that it's a client 
API, and working with different version of server counter part code.
They are not compatible, instead, A is a shim layer that hook into different 
libjar API and provide a common interface for B to use. So that to hide the API 
changes across version.
And in my case B need to be assembled into a fat jar for easy usage. So 
switching C in runtime won't be possible. Otherwise, not need an extra C, just 
switching libjar is ok.

Best Regards,
Raymond Liu


-----Original Message-----
From: Ron Wheeler [mailto:rwhee...@artifact-software.com] 
Sent: Wednesday, December 11, 2013 12:24 PM
To: users@maven.apache.org
Subject: Re: How to resolve right dependency which enabled and built/install 
with profile?

B  depends on A
A depends on C
C depends on libjar x.0 "provided"

C has no code and is only a pom not a jar.

You can then swap in any compatible version of libjar by providing it at 
run-time.

Still not sure why you can not just use the latest version of libjar if any 
version will work at run-time.

On 10/12/2013 7:52 PM, Liu, Raymond wrote:
> Thanks Stephen
>
>       I see your solution is let B manage the libjar version. While this is 
> against my wish, I wish B to know nothing about A's internal implementation. 
> In the future, A might depends on a v3.0 libjar, I do wish to just repackage 
> B to make it work not revise B's code or assembly rules. And sometime A might 
> be buried deep in the dependent tree, Those project might not even aware it 
> depends on A, they just wish it works on whatever current A's binary jar, 
> which then need the right libjar dependency when assembly.
>
>       And I know it seems hard to use profiles to manipulate dependencies. 
> While by theory, I think this is a reasonable requirement that a project do 
> not need to take care of its dependencies' internal implementation of what it 
> depends on, It just wish it works. E.g. if the POM file is installed in a way 
> that when it build with profile, the corresponding dependencies and any other 
> modifying is fill in the final POM file. ( since the profile is not used 
> anyway when resolve dependencies, why keep it there? For source jar? ) Then 
> those project depend on it won't worry about A's profile, it's already the 
> correct one which been used on building A with this installed or downloaded 
> binary jar.
>
>       So , using profile might not be the right solution, While if there 
> isn't an automatic way to meet this requirement, can I take it as a feature 
> missing?
>
> Best Regards,
> Raymond Liu
>
> -----Original Message-----
> From: Stephen Connolly [mailto:stephen.alan.conno...@gmail.com]
> Sent: Tuesday, December 10, 2013 6:57 PM
> To: Maven Users List
> Subject: Re: How to resolve right dependency which enabled and built/install 
> with profile?
>
> Using profiles to manipulate dependencies is a route to madness.
>
> An modules dependencies should be a constant... It was a mistake to allow 
> <dependencies> within <profile>.
>
> The correct solution is to create additional modules that aggregate in the 
> corresponding lib versions (this is also a bad plan, but less worse than your 
> current plan by quite some margin). The additional modules would depend on A 
> and the respective version of libjar and bundle the two together.
>
> Then B can depend if the corresponding internmediate... Now at this point you 
> will start to see the madness returning... That is if you need two versions 
> of B.
>
> The better solution is to just let B depend in A and then do the 
> fatjar as the final later after B and *override* the transitive dep on 
> libjar in the two fatjar building modules
>
> On Tuesday, 10 December 2013, Liu, Raymond wrote:
>
>> Hi
>>
>> I have a project with module A that will be built with or without 
>> profile say -Pnewlib , thus I can have it build with different 
>> version of library dependency let's say by default use libjar-1.0 and 
>> when -Pnewlib will use libjar-2.0.
>>
>> Then, I have a module B to depends on module A. The issue is that how 
>> can I get the right dependency in module B for libjar? I want to 
>> assemble a fat jar so I need to figure out which version of libjar to 
>> include.
>>
>> In my test, it seems to me that when mvn -Pnewlib install module A, 
>> though it will build with libjar-2.0. but the installed pom do not reflect 
>> this.
>> Thus when module B resolve the dependency, it will resolve the 
>> dependency as libjar-1.0 ( though when building module B, -Pnewlib is 
>> also passed in, But I think this will not pass to the dependent 
>> package when resolve the dependency).
>>
>> I don't want to have module B know anything about the libjar-1.0 and 
>> libjar-2.0. it should handle by module A, and module B just simply 
>> call into module A.
>>
>> Actually, I think this apply the same if A and B are not modules in 
>> one project, but standalone projects. In which case B will not define 
>> profile at all.
>>
>> So how can I achieve this goal? say, A take care of lib dependency 
>> when build and install. B who depends on A, when assembly can retrive 
>> the right lib dependency.
>>
>> Best Regards,
>> Raymond Liu
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
>> <javascript:;> For additional commands, e-mail:
>> users-h...@maven.apache.org<javascript:;>
>>
>>
> --
> Sent from my phone
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
> For additional commands, e-mail: users-h...@maven.apache.org
>
>


--
Ron Wheeler
President
Artifact Software Inc
email: rwhee...@artifact-software.com
skype: ronaldmwheeler
phone: 866-970-2435, ext 102


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to