Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[pde-dev] Common third-party dependencies exported for usage in other bundles

hi,

I am in the process of creating a gradle build system for the Freeplane
project. The (OSGi-)structure is simple:

- the 'freeplane' (core) project (OSGi plugin) contains core code as
  well as dependencies like commons-lang, commons-io, flamingo etc.

- the plugin projects ('freeplane_plugin_latex', 'freeplane_plugin_script',
  ...) make use of some core classes *and* third-party dependencies
  like commons-lang, commons-io, flamingo, ...

In order not to duplicate third-party-deps in all plugins [1], the old ant
code used to Require-Bundle: the core project in all plugin projects.

Since Require-Bundle: is not recommended practice any more, we decided
to Export-Package: the third-party-deps in the core project and
Import-Package: them in the plugin projects:

// core project MANIFEST
Export-Package: [...]
 org.pushingpixels.flamingo.api.common,
 org.pushingpixels.flamingo.api.common.icon,
 org.pushingpixels.flamingo.api.common.model,
 org.pushingpixels.flamingo.api.common.popup,
 org.pushingpixels.flamingo.api.ribbon

// plugin project MANIFEST
Import-Package: [...]
 org.pushingpixels.flamingo.api.common,
 org.pushingpixels.flamingo.api.common.icon,
 org.pushingpixels.flamingo.api.common.model,
 org.pushingpixels.flamingo.api.common.popup,
 org.pushingpixels.flamingo.api.ribbon

When we build Freeplane using gradle outside of eclipse, this works
when bypassing 'bnd' (a tool that helps generating OSGi MANIFESTs),
details are in [2].

However, when building/starting from Eclipse (Eclipse for RCP and RAP
Developers), Eclipse does not allow me to Export-Package:
i.e. org.pushingpixels.flamingo.api.common.* (probably because it's from
a third-party jar).

It does work anyway, since the plugin projects have an eclipse project
dependency on the core project BUT this would require us to modify
the MANIFESTs:

- when starting outside eclipse, we need the
  Export-Package:/Import-Package: solution (because the local
  third-party dependencies are not pulled transitively, see [2])

- when starting from eclipse, errors are generated for Export-Package:
  for third-party-deps (see flamingo above)

=> What is the best practice here? Do I really have to duplicate the
third-party deps or is there a way to make eclipse ignore or even honor
the Export-Package:?

The current deployed structure of Freeplane looks like:

./core/org.freeplane.core
./core/org.freeplane.core/lib
./core/org.freeplane.core/lib/substance-7.2.1.jar
./core/org.freeplane.core/lib/flamingo-7.2.1.jar
./core/org.freeplane.core/lib/substance-swingx-7.2.1.jar
./core/org.freeplane.core/lib/swingx-action-1.6.3.jar
./core/org.freeplane.core/lib/commons-io-2.4.jar
[...]
./core/org.freeplane.core/META-INF
./core/org.freeplane.core/META-INF/MANIFEST.MF
[...]
./plugins
./plugins/org.freeplane.plugin.latex
./plugins/org.freeplane.plugin.latex/lib
./plugins/org.freeplane.plugin.latex/lib/plugin-1.4.1.jar
./plugins/org.freeplane.plugin.latex/lib/jlatexmath-1.0.2.jar
./plugins/org.freeplane.plugin.latex/META-INF
./plugins/org.freeplane.plugin.latex/META-INF/MANIFEST.MF
[...]
./plugins/org.freeplane.plugin.openmaps
./plugins/org.freeplane.plugin.openmaps/lib
./plugins/org.freeplane.plugin.openmaps/lib/plugin-1.4.1.jar
./plugins/org.freeplane.plugin.openmaps/lib/JMapViewer.jar
./plugins/org.freeplane.plugin.openmaps/lib/JMapViewer_src.jar
./plugins/org.freeplane.plugin.openmaps/META-INF
./plugins/org.freeplane.plugin.openmaps/META-INF/MANIFEST.MF
[...]

If this the wrong mailing list, please tell me where I can get help
(unfortunately the gradle folks didn't answer [2]).

[1] That would be bad for the distribution size and to some extent for
the Freeplane Linux packages (we'd have to filter duplicate jars
manually - the non-transitive solution seems much cleaner to me).

[2] http://forums.gradle.org/gradle/topics/gradle-osgi-question-export-local-third-party-dependencies

Thanks a lot in Advance!!

Best Regards, 
-- 
Felix Natter



Back to the top