Stuart,

As always, your reply is very quick, timely, and extremely informative. Thanks!

I updated to maven 2.1.0, and this indeed _appears_ to fix the classpath problem:

[DEBUG] Classpath: [/Users/dleangen/bioscene/dev/trunk/domains/lsd/ model/impl/target/classes /Users/dleangen/.m2/repository/net/leangen/expedition/util/ expedition_object_api/0.1.1-SNAPSHOT/expedition_object_api-0.1.1- SNAPSHOT.jar /Users/dleangen/.m2/repository/com/bioscene/lsd/lsd-model-si/0.1.1- SNAPSHOT/lsd-model-si-0.1.1-SNAPSHOT.jar /Users/dleangen/.m2/repository/org/osgi/org.osgi.core/4.1.0/ org.osgi.core-4.1.0.jar /Users/dleangen/.m2/repository/org/osgi/org.osgi.compendium/4.1.0/ org.osgi.compendium-4.1.0.jar /Users/dleangen/.m2/repository/org/ops4j/pax/logging/pax-logging-api/ 1.3.0/pax-logging-api-1.3.0.jar]


So, now rather than using the output from target/classes, it is using the installed jar file. Great!

However, I'm still getting this:

/Users/dleangen/bioscene/dev/trunk/domains/lsd/model/impl/src/main/ java/com/bioscene/lsd/model/impl/TranslationImpl.java:[3,28] package net.jcip.annotations does not exist


/Users/dleangen/bioscene/dev/trunk/domains/lsd/model/impl/src/main/ java/com/bioscene/lsd/model/impl/TranslationImpl.java:[7,1] cannot find symbol
symbol: class Immutable
@Immutable


I'll try inlining to see what happens...


=David




On Apr 29, 2009, at 3:11 PM, Stuart McCulloch wrote:

2009/4/29 David Leangen <o...@leangen.net>


Hi,

I just updated to maven-bundle-plugin 2.0.0. It appears that there have been a few changes to the way things compile, and I'm just discovering many interesting things in my own projects. This is of course a good thing, as
it's bringing out many erroneous interpretations I made earlier.


Anyway, here's my current issue.

In project A, I have an embedded jar that I want to export. POM and bnd
file below.

In project B, I want to use the embedded package, but I only want to depend on the containing bundle, not the embedded bundle. Since the containing
bundle exports this, my assumption is that this should be possible.

However, the embedded jar in project A is only contained in the final
installed jar, not in the target/classes directory. The problem is that maven wants to read from the target/classes directory rather than from the
installed jar, so it can't find the embedded packages.


Any ideas?


Here's the essential of project A:

<dependencies>
  <dependency>
    <groupId>org.junit</groupId>
    <artifactId>com.springsource.org.junit</artifactId>
  </dependency>
  <dependency>
    <groupId>net.jcip</groupId>
    <artifactId>com.springsource.net.jcip.annotations</artifactId>
    <version>1.0.0</version>
    <scope>compile</scope>
    <optional>true</optional>
  </dependency>
</dependencies>

and the bnd file:

Export-Package: ${bundle.namespace}.*;version="${pom.version}"

Embed-Dependency:
com.springsource.net.jcip.annotations;groupId=net.jcip;inline=false

Bundle-RequiredExecutionEnvironment: J2SE-1.5

-exportcontents: net.jcip.*;version="1.0"



And here's the POM from project B:

<dependencies>
 ...
  <dependency>
    <groupId>net.leangen.expedition.util</groupId>
    <artifactId>expedition_object_api</artifactId>
    <scope>provided</scope>
  </dependency>
...
</dependencies>


The output from Maven looks like this:

[DEBUG] Classpath:
[/Users/dleangen/bioscene/dev/trunk/domains/lsd/model/impl/target/ classes

/Users/dleangen/.m2/repository/org/osgi/org.osgi.core/4.1.0/ org.osgi.core-4.1.0.jar /Users/dleangen/bioscene/dev/trunk/domains/lsd/model/si/target/ classes /Users/dleangen/bioscene/dev/trunk/platform/util/object/api/target/ classes

/Users/dleangen/.m2/repository/org/ops4j/pax/logging/pax-logging- api/1.3.0/pax-logging-api-1.3.0.jar

/Users/dleangen/.m2/repository/org/osgi/org.osgi.compendium/4.1.0/ org.osgi.compendium-4.1.0.jar]
[DEBUG] Output directory:
/Users/dleangen/bioscene/dev/trunk/domains/lsd/model/impl/target/ classes

So, in some cases it uses the jar file from the local cache, but in others,
the output in the target/classes dir.


this is a core Maven issue, specifically code in MavenProject.java:

  http://jira.codehaus.org/browse/MNG-2720

apparently it's fixed in Maven 2.1.0 so you might want to try that

BTW, you might not have noticed this before if you're using Pax- Construct
generated
projects because the maven-pax-plugin does some unpacking to make sure that
the
compilation classpath has the additional classes from the embedded
dependencies
(but this is only if you have <extensions>true</extensions for the paxplugin
and not
set for the bundleplugin, otherwise Maven will use the bundleplugin
lifecycle)

you can get the same effect by unpacking the final bundle into
"target/classes" after
the packaging step (either by using the maven-ant-plugin or the
maven-exec-plugin)

so I'd give Maven 2.1.0 a whirl and report back if that fixes your problem

Thanks!
=David



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org


--
Cheers, Stuart


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org

Reply via email to