[
https://issues.apache.org/jira/browse/FELIX-899?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12667588#action_12667588
]
Stuart McCulloch commented on FELIX-899:
----------------------------------------
To be consistent with other uses of Bnd (Ant task, command-line) the minimum we
need to pass to Bnd is the compilation classpath... but we could do better:
Bnd takes information from any JARs (version details, etc.) that the final
bundle depends on and uses it to augment the OSGi metadata (specifically
imports).
It doesn't really care whether it's a compile-time or run-time dependency (or
even provided) - if the final bundle needs to import a package from another
bundle, and it was built against a particular JAR with version information for
that package, then it will apply that version to the import. Now because Bnd
can detect certain indirect uses of packages, it could add imports for code
that you don't need at compile time but would need at runtime - so runtime
version information would be useful here too.
Now as Niclas pointed out at the start of this thread, you should really
version imports yourself rather than rely on automatic versioning - but it's in
our interest to give Bnd as much information about the classpath that the
bundle was compiled against, as well as the potential runtime classpath.
Excluding runtime artifacts just limits what Bnd knows about the project.
> Version attribute missing from Import-Package on provided dependencies
> ----------------------------------------------------------------------
>
> Key: FELIX-899
> URL: https://issues.apache.org/jira/browse/FELIX-899
> Project: Felix
> Issue Type: Bug
> Components: Maven Bundle Plugin
> Environment: Maven version: 2.0.9
> Java version: 1.6.0_11
> OS name: "linux" version: "2.6.25-gentoo-r7" arch: "amd64" Family: "unix"
> Reporter: Brian Atkinson
> Fix For: maven-bundle-plugin-1.6.0
>
> Attachments: projects.tar.bz2, projects2.tar.bz2
>
>
> I have been using and testing out the
> maven-bundle-plugin-1.5.0-20081205.125536-1 (SNAPSHOT) and ran across what I
> believe is a bug.
> Suppose there is a project a:a:1.0.0-SNAPSHOT. This project has a single
> class: a.a.A. The bundle plugin has the following instructions:
> <instructions>
>
> <_versionpolicy>[$${version;===;$...@}},$${version;=+;$...@}})</_versionpolicy>
>
> <Bundle-RequiredExecutionEnvironment>JavaSE-1.6</Bundle-RequiredExecutionEnvironment>
>
> <Export-Package>$${replace;${Bundle-SymbolicName};\W;.}.*;version=${project.version}</Export-Package>
> </instructions>
> This results in an Export-Package line of:
> Export-Package: a.a;version="1.0.0.SNAPSHOT"
> So far so good. Now suppose there is a project b:b:1.0.0-SNAPSHOT. This
> project depends on a:a:1.0.0-SNAPSHOT (scope: provided) and the project also
> has a single class b.b.B which extends a.a.A. The maven-bundle-plugin is
> given the same instructions as project a:a above. The resulting
> Import-Package line is:
> Import-Package: a.a,b.b;version="[1.0.0,1.1)"
> This is not what is expected. What is expected is the following:
> Import-Package: a.a;version="[1.0.0,1.1)",b.b;version="[1.0.0,1.1)"
> Digging into the code I found that in
> org.apache.felix.bundleplugin.BundlePlugin (trunk rev: 723704) in function
> "protected Jar[] getClasspath( MavenProject currentProject ) throws
> ZipException, IOException" line 708 reads:
> final Collection artifacts = getSelectedDependencies(
> currentProject.getArtifacts() );
> When the plugin is running "currentProject.getArtifacts()" returns an empty
> set. This then causes the classpath not to be set properly when calling BND
> (none of the dependencies are available for reading their manifests). I
> changed the line to use "currentProject.getDependencyArtifacts()" and the
> manifest for b:b was correct.
> I am going to attach a file with two very simple projects which mirror what I
> have described here.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.