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 <ear...@gmail.com> 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 <jus...@justinedelson.com> 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 <ear...@gmail.com> 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: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org

Reply via email to