Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-899

Version attribute missing from Import-Package on provided dependencies

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: maven-bundle-plugin-2.0.0
    • Component/s: Maven Bundle Plugin
    • Labels:
      None
    • 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"

      Description

      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.

        Attachments

        1. projects2.tar.bz2
          1 kB
          Brian Atkinson
        2. projects.tar.bz2
          1 kB
          Brian Atkinson

          Activity

            People

            • Assignee:
              mcculls Stuart McCulloch
              Reporter:
              nairb774 Brian Atkinson
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: