Stuart McCulloch-3 wrote:
On 19/04/2008, Niall Pemberton <niall.pemberton@gmail.com> wrote:
>
> On Fri, Apr 18, 2008 at 4:07 PM, mraible <matt@raibledesigns.com> wrote:
> >
> > I have a Maven 2 project with <packaging>war</packaging>. I've
> hand-written a
> > MANIFEST.MF to make my WAR OSGi-aware and have proven it works with
> Spring
> > DM.
> >
> > Now I want to get away from maintaining my MANIFEST and use the
> > maven-bundle-plugin to generate it. Is it possible to use this plugin
> in a
> > "war" project or does it only work with <packaging>bundle</packaging>?
>
> You can use the bundle plugin to just generate the MANIFEST (using the
> "manifest" goal) - this is what we've done in Apache Commons (thru's
> the parent pom) -
>
>
>
http://svn.apache.org/repos/asf/commons/proper/commons-parent/tags/commons-parent-9/pom.xml>
> The generated OSGi manifest is then merged in by the maven-jar-plugin.
> This is an alternative to using packaging "bundle".
btw, if you want to avoid manually setting the Bundle-ClassPath then you
could
use something like the following to match the bnd generated classpath
against
the actual WAR content:
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
<Embed-Directory>WEB-INF/lib</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
which will mimic the maven WAR layout of
"WEB-INF/lib/artifactId-version.jar"
HTH
--
Cheers, Stuart
For some reason, the following doesn't work for me:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<!--manifestFile>src/main/webapp/META-INF/MANIFEST.MF</manifestFile-->
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>1.4.0</version>
<configuration>
<instructions>
<!-- bundle specific conf -->
<Bundle-Name>${artifactId}</Bundle-Name>
<Bundle-SymbolicName>${osgi.symbolic.name}</Bundle-SymbolicName>
<Export-Package>${osgi.export.pkg}</Export-Package>
<Import-Package>${osgi.import.pkg}</Import-Package>
<Private-Package>${osgi.private.pkg}</Private-Package>
<!-- jar entries -->
<Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency>
<Embed-Directory>WEB-INF/lib</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
<Implementation-Title>MyApp</Implementation-Title>
<Implementation-Version>${pom.version}</Implementation-Version>
<Implementation-Vendor>AppFuse</Implementation-Vendor>
<Implementation-Vendor-Id>org.appfuse</Implementation-Vendor-Id>
<!-- Spring specific entries -->
<Spring-DM-Version>${spring.dm.version}</Spring-DM-Version>
<Spring-Version>${spring.version}</Spring-Version>
</instructions>
</configuration>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
</plugin>
The plugin looks like it's running:
[INFO] [bundle:manifest {execution: bundle-manifest}]
But no manifest is created. If I change <packaging> to jar and maven-war-plugin to maven-jar-plugin, it works fine.
Any ideas?
Here's the manifest I'm trying to auto-generate:
Manifest-Version: 1
Bundle-ManifestVersion: 2
Spring-DM-Version: 1.1.0-m2-SNAPSHOT
Spring-Version: 2.5.2
Bundle-Name: Simple OSGi War
Bundle-SymbolicName: myapp
Bundle-Classpath: .,WEB-INF/classes,WEB-INF/lib/freemarker-2.3.12.jar,
WEB-INF/lib/sitemesh-2.3.jar,WEB-INF/lib/urlrewritefilter-3.0.4.jar
Import-Package: javax.servlet,javax.servlet.http,javax.servlet.resources,javax.swing.tree,
javax.naming,org.w3c.dom,org.apache.commons.logging,javax.xml.parsers;resolution:=optional,
org.xml.sax;resolution:=optional,org.xml.sax.helpers;resolution:=optional,
org.springframework.osgi.web.context.support,
org.springframework.context.support,
org.springframework.web.context,
org.springframework.web.context.support,
org.springframework.web.servlet,
org.springframework.web.servlet.mvc,
org.springframework.web.servlet.mvc.support,
org.springframework.web.servlet.view,
org.springframework.ui,
org.springframework.web.servlet.view.freemarker
Thanks,
Matt