@Justin - I completely understand what you're saying wrt going against the grain (and will probably hit a wall with other plugins later on, e.g. karaf-features-plugin).
I suspect the issues I'm seeing with the maven-bundle-plugin are to do with binding to the wrong lifecycle phases and that there's probably a bug/limitation in the felix-scr-plugin. This isn't an urgent requirement, so given time, I'll debug the build and see what turns up. thanks, Caspar On 8 August 2011 16:39, Justin Edelson <[email protected]> wrote: > It is definitely possible to generate classifier-based artifacts with > different manifests using the bundle plugin. Not sure about the scr > plugin. > > My point is that this is not a mainstream usage and you are likely to > run into problems such as the ones you are seeing. Better to use tools > in the way they are intended than to fight against them. But feel free > to submit issues and patches. > > Justin > > On Mon, Aug 8, 2011 at 11:25 AM, Caspar MacRae <[email protected]> wrote: > > @Justin, thanks for the link, I certainly won't spam this list with maven > > specifics. > > > > Respectful of the *shouldn't* but rephrasing the question specifically > > regarding maven-bundle-plugin and felix-scr-plugin; Given that other > > plugins support (rightly or wrongly) multiple artifacts based on > classifier, > > are the issues I'm seeing due to a bug or purposeful lack of support in > > these plugins or due configuration errors in my pom? > > > > thanks, > > Caspar > > > > > > On 8 August 2011 15:26, Justin Edelson <[email protected]> wrote: > > > >> > >> > http://www.sonatype.com/people/2010/01/how-to-create-two-jars-from-one-project-and-why-you-shouldnt/ > >> > >> If you have further questions on Maven best practices, you should post > >> this question to the maven users list. I think there's an obvious > >> difference between source/javadoc artifacts and api/impl artifacts. > >> > >> > >> On Mon, Aug 8, 2011 at 10:17 AM, Caspar MacRae <[email protected]> > wrote: > >> > Hi, > >> > > >> > @Justin Thanks for your response. I see classifiers used quite a bit > to > >> > produce artifacts other than the "standard" tests, source and javadoc > - > >> can > >> > you point me to an explanation of why this is a bad practice? (forgive > me > >> - > >> > I'm not being thorny, would just like to understand more). AFAIK > BNDtools > >> > and P2 allow more than one artifact per source module, is this a > legacy > >> of > >> > maven v1,v2 to be relaxed in v3? > >> > > >> > We currently have tons of tiny bundles - many consisting of little > more > >> than > >> > a service interface (exported) and implementation (private). To split > >> these > >> > out so that they consist of just a single interface in one bundle and > a > >> > single service in another is a source code management nightmare (while > I > >> > desperately want neater wiring of bundles when it comes to deploying > >> minor, > >> > non-API breaking changes, I'm not sure this is worth the expense of > such > >> > granular maven modules). > >> > > >> > Aside from this request being against maven best practices, looking > >> through > >> > Jira I can see a few tickets referring to classifiers and bundle > plugin, > >> > e.g. FELIX-492, FELIX-1021 - so is this working fine and have I just > >> messed > >> > up my pom? > >> > > >> > thanks, > >> > Caspar > >> > > >> > > >> > On 8 August 2011 14:54, Justin Edelson <[email protected]> > wrote: > >> > > >> >> This is not a good idea as it runs against Maven best practices. You > >> >> should restructure your project to produce a single artifact per > >> >> project. > >> >> > >> >> Justin > >> >> > >> >> On Mon, Aug 8, 2011 at 6:23 AM, Caspar MacRae <[email protected]> > wrote: > >> >> > Hello, > >> >> > > >> >> > I'm trying to get a single maven module to build separate bundles > by > >> >> > classifier - the intention is to be able to have multiple build > >> artifacts > >> >> > per project; > >> >> > > >> >> > > >> >> > 1. no classifier with included API packages exported and > imported, > >> with > >> >> > included implementation packages private > >> >> > 2. "-api" classifier with only API packages (and these exported) > >> >> without > >> >> > implementation > >> >> > 3. "-imp" classifier with the API packages imported but not > >> included, > >> >> and > >> >> > implementation packages private > >> >> > > >> >> > I can build the Jars with the correct packages included/excluded, > but > >> >> it's > >> >> > the same META-INF/MANIFEST.MF used for all three and DS the > >> >> > OSGI-INF/serviceComponents.xml is generated but not included. > >> >> > > >> >> > Hoping what I'm attempting is actually possible and that it's just > >> >> something > >> >> > stupid I'm doing wrt the lifecycle phase. > >> >> > > >> >> > Is there anybody out there that can see what I'm missing/doing > wrong? > >> >> > > >> >> > > >> >> > thanks, > >> >> > > >> >> > Caspar > >> >> > > >> >> > > >> >> > Here's the pluginManagement pom snippet: > >> >> > > >> >> > > >> >> > </pluginManagement> > >> >> > > >> >> > </plugins> > >> >> > > >> >> > <!-- ... ---> > >> >> > > >> >> > <plugin> > >> >> > <groupId>org.apache.maven.plugins</groupId> > >> >> > <artifactId>maven-jar-plugin</artifactId> > >> >> > <version>2.3.1</version> > >> >> > <configuration> > >> >> > <archive> > >> >> > > >> >> > > >> >> > >> > <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> > >> >> > </archive> > >> >> > </configuration> > >> >> > <executions> > >> >> > <execution> > >> >> > <id>jar-api</id> > >> >> > <goals> > >> >> > <goal>jar</goal> > >> >> > </goals> > >> >> > <configuration> > >> >> > <classifier>api</classifier> > >> >> > <includes> > >> >> > <includes>**/api/*</includes> > >> >> > </includes> > >> >> > </configuration> > >> >> > </execution> > >> >> > <execution> > >> >> > <id>jar-imp</id> > >> >> > <goals> > >> >> > <goal>jar</goal> > >> >> > </goals> > >> >> > <configuration> > >> >> > <classifier>imp</classifier> > >> >> > <includes> > >> >> > <includes>**/imp/*</includes> > >> >> > </includes> > >> >> > </configuration> > >> >> > </execution> > >> >> > </executions> > >> >> > </plugin> > >> >> > > >> >> > <plugin> > >> >> > <!-- Process the DS annotations --> > >> >> > <groupId>org.apache.felix</groupId> > >> >> > <artifactId>maven-scr-plugin</artifactId> > >> >> > <version>1.7.0</version> > >> >> > <executions> > >> >> > <execution> > >> >> > <id>scr-imp</id> > >> >> > <goals> > >> >> > <goal>scr</goal> > >> >> > </goals> > >> >> > <configuration> > >> >> > <classifier>imp</classifier> > >> >> > > >> >> <generateAccessors>true</generateAccessors> > >> >> > </configuration> > >> >> > </execution> > >> >> > </executions> > >> >> > </plugin> > >> >> > > >> >> > <plugin> > >> >> > <!-- Generate OSGi bundle MAINFEST.MF entries > --> > >> >> > <groupId>org.apache.felix</groupId> > >> >> > <artifactId>maven-bundle-plugin</artifactId> > >> >> > <version>2.3.5</version> > >> >> > <extensions>true</extensions> > >> >> > <configuration> > >> >> > <archive> > >> >> > > >> <addMavenDescriptor>true</addMavenDescriptor> > >> >> > </archive> > >> >> > <supportedProjectTypes> > >> >> > > >> >> <supportedProjectType>jar</supportedProjectType> > >> >> > > >> >> <supportedProjectType>war</supportedProjectType> > >> >> > </supportedProjectTypes> > >> >> > <instructions> > >> >> > <Bundle-Vendor>${ > project.organization.name > >> >> > }</Bundle-Vendor> > >> >> > > >> >> > > >> >> > >> > <Bundle-ContactAddress>${project.organization.url}</Bundle-ContactAddress> > >> >> > > >> >> > <Bundle-Description>${project.description}</Bundle-Description> > >> >> > > >> >> <Bundle-DocURL>${bundle.doc.url}</Bundle-DocURL> > >> >> > > >> >> > <Bundle-Category>${bundle.category}</Bundle-Category> > >> >> > > >> >> > <!-- PAX mangles this, it uses the name > of > >> the > >> >> > project for the symbolicname > >> >> > of test bundle? > <Bundle-SymbolicName>${ > >> >> > project.name}</Bundle-SymbolicName> --> > >> >> > > >> >> > <Bundle-SymbolicName>${bundle.symbolicname}</Bundle-SymbolicName> > >> >> > > >> >> > > >> >> > <Bundle-Version>${project.version}</Bundle-Version> > >> >> > <_include>-osgi.bnd</_include> > >> >> > <Import-Package>*</Import-Package> > >> >> > <Export-Package> > >> >> > > >> >> > !${project.artifactId}.imp.*,${project.artifactId}.* > >> >> > </Export-Package> > >> >> > > >> >> > <Private-Package>${project.artifactId}.imp.*</Private-Package> > >> >> > </instructions> > >> >> > </configuration> > >> >> > <executions> > >> >> > <execution> > >> >> > <id>bundle-api</id> > >> >> > <goals> > >> >> > <goal>manifest</goal> > >> >> > </goals> > >> >> > <phase>process-classes</phase> > >> >> > <inherited>true</inherited> > >> >> > <configuration> > >> >> > <classifier>api</classifier> > >> >> > <instructions> > >> >> > > >> >> > <Export-Package>${project.artifactId}.*</Export-Package> > >> >> > > >> <Private-Package>!*</Private-Package> > >> >> > </instructions> > >> >> > </configuration> > >> >> > </execution> > >> >> > <execution> > >> >> > <id>bundle-imp</id> > >> >> > <goals> > >> >> > <goal>manifest</goal> > >> >> > </goals> > >> >> > <phase>process-classes</phase> > >> >> > <inherited>true</inherited> > >> >> > <configuration> > >> >> > <classifier>imp</classifier> > >> >> > <instructions> > >> >> > > >> >> > > >> >> > >> > <Export-Package>!${project.artifactId}.imp.*,${project.artifactId}.*</Export-Package> > >> >> > > >> >> > <Private-Package>${project.artifactId}.imp.*</Private-Package> > >> >> > </instructions> > >> >> > </configuration> > >> >> > </execution> > >> >> > > >> >> > </executions> > >> >> > </plugin> > >> >> > <!-- ... ---> > >> >> > </plugins> > >> >> > </pluginManagement> > >> >> > > >> >> > > >> >> > And usage in a child POM looks like: > >> >> > > >> >> > > >> >> > <build> > >> >> > <plugins> > >> >> > <!-- ... ---> > >> >> > > >> >> > <plugin> > >> >> > <groupId>org.apache.felix</groupId> > >> >> > <artifactId>maven-bundle-plugin</artifactId> > >> >> > </plugin> > >> >> > <plugin> > >> >> > <groupId>org.apache.felix</groupId> > >> >> > <artifactId>maven-scr-plugin</artifactId> > >> >> > </plugin> > >> >> > <plugin> > >> >> > <groupId>org.apache.maven.plugins</groupId> > >> >> > <artifactId>maven-jar-plugin</artifactId> > >> >> > </plugin> > >> >> > <!-- ... ---> > >> >> > > >> >> > </plugins> > >> >> > </build> > >> >> > > >> >> > >> > > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > >> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >

