I have a JNI library, dynamic libraries and dynamic & static build libraries 
for a software component that are all platform specific. 

This is causing 2 problems for me:

1) artifact filename clashing. While the dll's and libs used to compile against 
on windows and linux are all named differently, the jar files are not. 
Additionally the component is released with the same version, so there's 
nothing to distinguish with platform the jar files came from. Additionally 
we've found out that the code in the jar files on the different platforms even 
with the same release number is not identical, and while we can compile java 
components using the jar file from one or the other, we have to make sure that 
the jar file we use at runtime is the one that was shipped with the dll or so 
file.

Windows: 
component.dll <-- dynamic library
component.lib <-- library to compile against to use dll
component_static.lib <-- static library for standalone
component.jar <-- jar file

Linux:
libcomponent.so <-- dynamic library, used to compile against
libcomponent_static.a <-- static library for standalone
component.jar <-- jar file, oh look same name, oh fun!

Right now, I'm not publishing these components to our internal artifact 
repository, however I plan to in order to shift fully over to using ivy for 
dependency management. In doing so I'll have to handle the fact that when 
developers are building for windows or linux, that they get the correct ones, 
particularly if we want to run any unit tests :/ (developers always run those, 
right?...).

My only thoughts for a solution at the moment is to modify either the name or 
path of the jar file when publishing it to include an os specifier. This is the 
only solution I can really see working, unless of course the team that built 
the jar file could built it so that it would work wit the native library on 
either platform, but I doubt that would succeed. Any other suggestions?


2) configurations. I need OS specific configurations to distinguish the 
artifacts when ivy retrieves them so that the correct set is retrieved for 
building against whether on linux or windows. Ideally I'll like to be able to 
specify a 'build' configuration and just have ivy retrieve the correct 
dependencies depending on the target OS, however, I don't see how that is 
possible. It looks like to me, that I have to change which configuration I 
retrieve by relying on some conditionals in the ant scripts. 

That's possible for the ant builds, but I'm not sure how to handle this 
correctly for the eclipse builds and ivyde. 

Would it be possible to have a build configuration that extends a variable 
configuration i.e.

<conf name="build" visibility="public" extends="build-${target.os}" 
description="--> libraries for build time depending on value of os.target 
property" />
<conf name="build-linux" visibility="private" description="--> libraries for 
building for linux targets" />
<conf name="build-windows" visibility="private" description="--> libraries for 
building for windows targets" />

Then use a property file in ivyde to define target.os? If it's not defined by 
eclipse by default. I haven't checked. 


I haven't tried anything on this just yet, hoping to as soon as I get some time 
to work on it, but hoping that someone may have already have a solution and 
will stop me from going down a dead end before I get around to these problems.

--
Regards,
Darragh Bailey

Reply via email to