Aaron Siri wrote:
Sorry - thought it was implied.  Since this is a maven plugin I'd want the
process automated (with reasonable overrides.) :)

Again - like the war-plugin, osgi-plugin (and most other packaging maving
plugins that I am familiar with) jar dependencies (with the compile scope)
are automatically added to the artifact (in this case, a bundle) as-is and
made available to the runtime (in this case added to Bundle-ClassPath.)
Specifying where in the bundle the jars should go (i.e. META-INF/lib, lib,
etc.) would be a bonus.

I still feel like my question wasn't totally answered. I understand that you want the process automated; we all do, which is why we have a plugin. What I don't understand is whether it is a requirement that you want the JAR file embedded or if inlining of the JAR is acceptable.

I am asking this question to get a better understanding of how possibly to devise a solution.

With all due respect, having to specify the <Private-Package/> instruction to
pull in dependencies seems a little goofy and anti-maven.  Via the POM I
already specified the dependencies and if they need to be part of the
artifact.  Finer-grained visibility control can then be done via the
Export-Package instruction.

If you consider it anti-Maven, then maybe it is, I don't know. Maven doesn't really work exactly like I would like it to.

For example, we have a very simple Log Service implementation in Felix. The actually Log Service interface package is in the compendium bundle. This means that the Log Service bundle has a dependency on the compendium bundle. If I follow the "pro-Maven" approach, then to use this very lightweight log service I have to download the fairly large compendium bundle and the servlet bundle, since compendium has a dependency on that.

I don't know of any real "pro-Maven" approach for eliminating this situation other than copying the Log Service package source code from the compendium project into my Log Service project. The downside of this approach is that I now have to maintain two copies of the source code.

With the maven-bundle-plugin, I can simply include the package I need from the compendium dependency and now I have a completely self-contained, lightweight Log Service bundle.

This approach may not suit every purpose, but it definitely comes in handy if you ask me.

I can see the other side to the argument too, so we just have to think up a good solution for both, I think.

-> richard

-Aaron

-----Original Message-----
From: Richard S. Hall [mailto:[EMAIL PROTECTED] Sent: Tuesday, December 05, 2006 3:26 PM
To: felix-dev@incubator.apache.org
Subject: Re: Bundle plugin: Importing packages from non-bundles

Aaron Siri wrote:
RH> You simply indicate which packages you want in your bundle and RH> they are
copied into it.

Huh?! So, if I write a bundle that uses the dom4j API (it is a <dependency/> in my bundle's POM) this plugin won't simply bundle dom4j.jar and add a reference to it to Bundle-ClassPath? Instead, I have to know what all of the packages are in dom4j.jar and explicitly *indicate* that they should be *copied* into the bundle so that they are available at runtime? Is that correct? I want to make sure I understand this correctly.

Yes, you understand. Often the only thing that is required is something
like:

    <Private-Package>org.dom4j.*</Private-Package>

But you didn't answer my question, are you interested in having embedded JAR
files (as opposed to inlined JAR files) or interested in simply automating
the above process?

-> richard

-Aaron

-----Original Message-----
From: Richard S. Hall [mailto:[EMAIL PROTECTED]
Sent: Tuesday, December 05, 2006 2:45 PM
To: felix-dev@incubator.apache.org
Subject: Re: Bundle plugin: Importing packages from non-bundles

Aaron Siri wrote:
Understood. A switch or option would be nice then. My Import-Package property is huge and always looks like a mess.
If it is calculated, then it shouldn't be something to worry about...I am sure the byte code in my class files looks like a mess too. ;-)

Still wondering about jar dependencies and auto-generation of Bundle-ClassPath (and packaging). The older maven-osgi-plugin supported this.
Yes, the new plugin promotes a different approach to creating bundles. You simply indicate which packages you want in your bundle and they are copied into it.

Do you have the need for actually embedding JAR files into your bundle or is your desire to simply have some way to automatically embedded your dependencies (inlined or as JAR files) into your bundle?

-> richard



-Aaron

-----Original Message-----
From: Richard S. Hall [mailto:[EMAIL PROTECTED]
Sent: Tuesday, December 05, 2006 2:09 PM
To: felix-dev@incubator.apache.org
Subject: Re: Bundle plugin: Importing packages from non-bundles

Aaron Siri wrote:
Only dependencies that are of type bundle. Plain old jars would be added to the classpath. I guess it doesn't have to be the default behavior - just possible.

As a side note. You create bundles that are dependent on other bundles (to compile, I assume) but then you don't want them to be required during runtime?
The issue is Import-Package vs. Require-Bundle. I prefer Import-Package over Require-Bundle for my dependencies.

-> richard

-Aaron

-----Original Message-----
From: Richard S. Hall [mailto:[EMAIL PROTECTED]
Sent: Tuesday, December 05, 2006 1:56 PM
To: felix-dev@incubator.apache.org
Subject: Re: Bundle plugin: Importing packages from non-bundles

Aaron Siri wrote:
I guess I'm expecting it to behave a little more like the war-plugin with respect to dependency jars. Any dependency that is of type jar and has a scope of something like compile will be included in the bundle jar (and on the manifest classpath). For that matter, any dependency that is of type bundle I'd expect to be included in the manifest
Required-Bundles property.
Well, I definitely would not want the default handling of dependencies to be converted to require-bundle...

-> richard

-Aaron

-----Original Message-----
From: Peter Kriens [mailto:[EMAIL PROTECTED]
Sent: Tuesday, December 05, 2006 12:46 PM
To: Aaron Siri
Cc: felix-dev@incubator.apache.org
Subject: Re[6]: Bundle plugin: Importing packages from non-bundles

Sorry for the previous mail, was not finished yet.

I think it is :

 <configuration>
      <instructions>
         <Include-Resource>plugin.xml</Include-Resource>
      </instructions>
 </configuration>
And not

 <configuration>
         <Include-Resource>plugin.xml</Include-Resource>
 </configuration>

You can always package the bundles as jars, you just have to Include them as resources. However, this implies you know where to find
them.
Please realize that the plugin was build for the OSGi model where you have many small bundles. This implies that not all scenarios are targeted with this plugin.

Kind regards,

     Peter Kriens
AS> I was going to start asking similar questions. I'm wondering AS> how I get my dependencies packaged in the bundle (I prefer them AS> as jars and not inlined.) Does this thread imply that there is AS> no way for library jars to be packaged in the bundle using
maven-bundle-plugin?
AS> I'm also trying to get the plugin.xml file included into the AS> bundle
via:
AS> <configuration>
AS>         <Include-Resource>plugin.xml</Include-Resource>
AS> </configuration>

AS> Which doesn't seem to be working. Is this the right way to get AS> it
included?

AS> -Aaron

AS> -----Original Message-----
AS> From: Emil Eifrém [mailto:[EMAIL PROTECTED]
AS> Sent: Tuesday, December 05, 2006 10:10 AM
AS> To: Peter Kriens
AS> Cc: felix-dev@incubator.apache.org
AS> Subject: Re: Re[4]: Bundle plugin: Importing packages from AS> non-bundles

AS> On 12/5/06, Peter Kriens <[EMAIL PROTECTED]> wrote:
I am not a maven expert so maybe there are better ways to do it.

I never understood "provided" to mean include? If that is the definition I can automatically include them. Can someone point me to the relevant literature?
AS> Neither am I, but it actually means exclude. From
AS> http://maven.apache.org/pom.html:

--- >>8 ---
AS> * scope: This element refers to the classpath of the task at AS> hand (compiling and runtime, testing, etc.) as well as how to AS> limit the transitivity of a depedency. There are five scopes
available:
AS>     * compile - this is the default scope, used if none is
specified.
AS> Compile dependencies are available in all classpaths.
AS> * provided - this is much like compile, but indicates you AS> expect the JDK or a container to provide it. It is only AS> available on the compilation classpath, and is not transitive. AS> * runtime - this scope indicates that the dependency is not AS> required for compilation, but is for execution. It is in the AS> runtime and test classpaths, but not the compile classpath. AS> * test - this scope indicates that the dependency is not AS> required for normal use of the application, and is only AS> available for the test compilation and execution phases. AS> * system - this scope is similar to provided except that AS> you have to provide the JAR which contains it explicitly. The AS> artifact is always available and is not looked up in a repository.
--- >>8 ---

The <type>bundle</type> is required by maven as far as I know, as is the messy plugin setup. If you know a better way let me know.
AS> Unfortunately, I'm even less of an expert on Maven than I am on
OSGi.
AS> I just want stuff to work so I can build apps. :) But this is AS> an Apache list, I'm sure others can chime in!

AS> What I meant in my previous mail was that I don't understand AS> why the plugin needs to know the <type> of the dependencies. AS> It's an OSGi-aware
plugin...
AS> just have a peek in the jar file and figure it out? If it is, AS> then generate Import-Package, if not then embed or inline it. AS> Would work nicely. But maybe there's some Maven core <-> Maven AS> plugin interaction going on there that I'm missing. In either AS> case, this would be nice-to-have functionality but it's not a
showstopper for us.
AS> [snip]
Inlining or Bundle-Classpath both make no difference for the Import-Package. The import header is calculated from the references from all the classes on the Bundle-Classpath.
AS> Here's where I don't get it. Let's go back to the simple AS> original example with my one-class bundle which depended on
commons-logging.
AS> If the plugin would embed or inline the commons-logging jar AND AS> generate Import-Package statements... that would break when we AS> load it into the OSGi framework, right? No other bundle will AS> export commons-logging stuff and, moreover, even if there is I AS> want my bundle to
use the embedded stuff like I said in my POM.
AS> This is the core of the issue, as I see it.

AS> Cheers,

AS> -EE


Reply via email to