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]

Reply via email to