Set it up in pluginManagement instead of plugins in the parent? On Fri, Jun 26, 2009 at 4:03 AM, Lewis, Eric<[email protected]> wrote: > Hi > > We have a build which consists of several projects which each consists of > several modules. We also have a global parent which defines how the build > works. > > Now, I had the problem that some modules need special steps in their build, > e.g. JAXB2 generation, creating an OSGi module etc. > > Of course, I tried to stick to the Don't Repeat Yourself principle and wanted > to administer these special steps myself, instead of leaving it to the > individual developers to copy & paste the build configuration over and over. > > Since including parts of XML into a POM seems to be impossible, I did it with > profiles. For example: > > <!-- Use this profile if you want to generate XML binding classes using > JAXB2. --> > <profile> > <id>jaxb</id> > <build> > <plugins> > <plugin> > <groupId>org.jvnet.jaxb2.maven2</groupId> > <artifactId>maven-jaxb2-plugin</artifactId> > <executions> > <execution> > <goals> > <goal>generate</goal> > </goals> > </execution> > </executions> > <configuration> > <schemaDirectory>${jaxb.schema.directory}</schemaDirectory> > <generatePackage>${jaxb.package}</generatePackage> > <removeOldOutput>true</removeOldOutput> > <forceRegenerate>true</forceRegenerate> > </configuration> > </plugin> > </plugins> > </build> > <properties> > <jaxb.schema.directory>src/main/resources</jaxb.schema.directory> > <jaxb.package>ch.ipi.${project.artifactId}.xml</jaxb.package> > </properties> > </profile> > > Now, if a module wants to use JAXB2, it just has to specify -Pjaxb; so far, > so good. > > I thought this was a nifty solution, but there's a problem with reactor > builds: Let's say that I want to build the whole project (modules A, B, C), > and module A needs JAXB generation, module B needs an OSGi build etc. > > The only way I saw until recently was to specify all the profiles required by > all the modules when building the whole project. However, for some plugins, > this fails miserably, since the plugin *expects* to see certain files, and if > it doesn't have them, it breaks the build. Besides, I tell every module to do > these special steps, and they only don't execute them because some > file/directory is missing (e.g. the XML schema directory), which for me is > kind of shaky... > > The best thing for me would have been to activate a profile based on a Maven > property, so I could set the property it in the module's POM. Alas, this idea > doesn't work, since Maven only activates profiles based on system properties. > > Next, I tried activating using files, something like > > <!-- Use this profile if you want to generate XML binding classes using > JAXB2. --> > <profile> > <id>jaxb</id> > <activation> > <file> > <exists>jaxb.profile</exists> > </file> > </activation> > ... > > So, module A has a file 'jaxb.profile' in its root directory, module B has > 'osgi.profile' etc. This works well on an individual module level, but as > soon as I build the whole project, it's totally ignored by the reactor. > > > In other words, I'm stuck! > > Does anyone have the same kind of build that we have and what's your > solution? Is my idea of using profiles for this a valid one or am I totally > off "the Maven way"? > > Should I file a request for enhancement that profiles should be activated by > Maven properties? > > > Best regards, > Eric > --------------------------------------------------------------------- > 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]
