2008/7/17 Nick Campion <[EMAIL PROTECTED]>:

> I've been struggling with a problem for a few days now.  I am trying to
> build a bundle using maven.  Although I'm new to maven, I think the problem
> seems legitimate.
>
> I'll explain the problem with a contrived example.  This bundle (we'll call
> it bundle A) is dependent on a bundles provided by the OSGi environment.
>  This bundle is constructed in a fashion that is causing me significant
> trouble.
>
> Bundle B has the following contents:
> ./META-INF/MANIFEST.MF
> ./classes/func1.jar
> ./classes/func2.jar
> ...etc....
>
> In the manifest file, there is a Bundle-ClassPath entry that looks like
> this:
>
> Bundle-ClassPath: classes/, ,classes/func1.jar, classes/func2.jar
>
> The manifest also has an Export-Package section that looks somewhat like
> this:
>
> Export-Package: com.nick.func1, com.nick.func2
>
> Thus, the bundle is exporting the functionality of the jars out through a
> bundle as com.nick.func1 resides in func1.jar.  Bundle B is not build by my
> team and is not created using Maven.  It is put into our repository
> automatically by the eclipse:to-maven goal.
>
> Now, my bundle A is dependent on package com.nick.func1.  Since this is
> exported by bundle B, I add bundle B to my maven pom.xml as a provided
> dependency.  I can see that bundle B is added to the classpath call during
> the maven compile by adding the debug parameter, but the compilation of
> bundle A fails saying package com.nick.func1 cannot be found.  I can only
> imagine this is because the class loader is not considering the
> Bundle-ClassPath of bundle B for possible inclusion into the classpath for
> compilation of A.
>
> The eclipse workbench seems to be able to handle this situation, but we'd
> really like to use Maven to do the compile.  Has anyone seen this problem
> before that can suggest a workaround?
>

by default Maven uses javac for compilation - and javac does not support
embedded jars

you could try switching to the Eclipse compiler:

  <pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <compilerId>eclipse</compilerId>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>1.5.1</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </pluginManagement>

but I'm not sure if that supports embedded jars either - the PDT tooling in
Eclipse
is grafted on top of JDT and I think there's some extra magic to support
this that
isn't in the base tooling (but I may be wrong)

if that all fails then you could consider adding the maven-pax-plugin to
your build:

      <plugins>
        <plugin>
          <groupId>org.ops4j</groupId>
          <artifactId>maven-pax-plugin</artifactId>
          <version>1.3</version>
          <!--
           | enable improved OSGi compilation support for the bundle
life-cycle.
           | to switch back to the standard bundle life-cycle, move this
setting
           | down to the maven-bundle-plugin section
          -->
          <extensions>true</extensions>
        </plugin>
      </plugins>

you'll also need to remove the <extensions>true</extensions> from the
bundleplugin
because the maven-pax-plugin provides a customized "bundle" lifecycle with
modified
compilation stages that unpack embedded jars automatically so javac can find
them
(you should see [pax:compile] appear for the compile phase)

FYI, this plugin is part of Pax-Construct (
http://www.ops4j.org/projects/pax/construct)
but can be used in any Maven OSGi project, not just projects created by
these tools.

HTH

---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
-- 
Cheers, Stuart

Reply via email to