You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Stevo Slavic (JIRA)" <ji...@codehaus.org> on 2010/08/29 00:57:32 UTC

[jira] Updated: (MASSEMBLY-445) Support parametrization of component descriptors

     [ http://jira.codehaus.org/browse/MASSEMBLY-445?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stevo Slavic updated MASSEMBLY-445:
-----------------------------------

    Attachment: org.apache.maven.plugins.maven-assembly-plugin-MASSEMBLY-445.patch

After rethinking this new feature, I've come to a conclusion that initially it would be enough to just expose assembly id so it becomes referenceable as parameter from within component descriptors.

Here is a patch ( [^org.apache.maven.plugins.maven-assembly-plugin-MASSEMBLY-445.patch] ) which adds support for this new feature. It works like this:
- If assembly id is defined in assembly descriptor ([assembly-1.1.1.xsd|http://maven.apache.org/xsd/assembly-1.1.1.xsd] allows it not to be) that is being processed by the assembly plugin, then assembly interpolator gets configured to replace "${assembly.id}" references with current assembly's id value;
- This substitution works correctly also when assembly id itself references some cli/environment/project parameter/property, like project.build.finalName;
- A fresh interpolator is created for interpolation of every assembly in a given project, so correct assembly id will be used for assembly interpolation if there are more than one assemblies defined;
- Because of when existing assembly plugin code applies assembly interpolation (after merging info from component descriptor(s) into assembly - and I didn't want to change that), assembly.id can be referenced from assembly descriptor, but primary goal was to support referencing it from component descriptor;
- If assembly.id is defined as project property, or given as cli parameter, than that property/parameter value will take precedence compared to assembly descriptor's id value when it comes to assembly/component interpolation.

Patch contains additional tests for this feature, and all of them, including existing ones, pass.

> Support parametrization of component descriptors
> ------------------------------------------------
>
>                 Key: MASSEMBLY-445
>                 URL: http://jira.codehaus.org/browse/MASSEMBLY-445
>             Project: Maven 2.x Assembly Plugin
>          Issue Type: Wish
>    Affects Versions: 2.2-beta-4
>            Reporter: Stevo Slavic
>         Attachments: org.apache.maven.plugins.maven-assembly-plugin-MASSEMBLY-445.patch
>
>
> Please support parametrization of component descriptors. One should be able to specify parameter placeholders in component descriptors, and when referencing component descriptor from an assembly descriptor provide actual parameter value(s) which would then be applied to the parameter placeholders. One should be able to set global parameters (for all component descriptors), and component descriptor specific parameters, with component descriptor specific parameters overriding global ones if their names overlap.
> This would be useful if e.g. one uses assembly descriptors to specify assemblies for different deployment environments, and if these assemblies differ (see example [1]) only in which environment specific configuration file should be included in the assembly where this distinction is based on configuration file name suffix - this suffix could be passed to shared component descriptor as parameter, like in example [2].
> [1] assembly descriptor example without parameters
> <?xml version="1.0" encoding="UTF-8"?>
> <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
> 			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 			xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1
> 								http://maven.apache.org/xsd/assembly-1.1.1.xsd">
> 	<id>prod</id>
> 	<formats>
> 		<format>war</format>
> 	</formats>
> 	<includeBaseDirectory>false</includeBaseDirectory>
> 	<fileSets>
> 		<fileSet>
> 			<directory>${project.build.directory}/${project.build.finalName}</directory>
> 			<outputDirectory>/</outputDirectory>
> 			<excludes>
> 				<exclude>**/jdbc.properties</exclude>
> 				<exclude>**/jdbc-*.properties</exclude>
> 			</excludes>
> 			<excludes>
> 				<exclude>**/log4j.xml</exclude>
> 				<exclude>**/log4j-*.xml</exclude>
> 			</excludes>
> 		</fileSet>
> 	</fileSets>
> 	<files>
> 		<file>
> 			<source>${project.build.outputDirectory}/com/foo/bar/cfg/jdbc-${environment}.properties</source>
> 			<outputDirectory>WEB-INF/classes/com/foo/bar/cfg/</outputDirectory>
> 			<destName>jdbc.properties</destName>
> 		</file>
> 		<file>
> 			<source>${project.build.outputDirectory}/com/foo/bar/cfg/log4j-${environment}.xml</source>
> 			<outputDirectory>WEB-INF/classes/</outputDirectory>
> 			<destName>log4j.xml</destName>
> 		</file>
> 	</files>
> </assembly>
> [2] parametrized component descriptor and usage example
> src/main/assembly/component.xml
> ---------------------
> <component>
> 	<fileSets>
> 		<fileSet>
> 			<directory>${project.build.directory}/${project.build.finalName}</directory>
> 			<outputDirectory>/</outputDirectory>
> 			<excludes>
> 				<exclude>**/jdbc.properties</exclude>
> 				<exclude>**/jdbc-*.properties</exclude>
> 			</excludes>
> 			<excludes>
> 				<exclude>**/log4j.xml</exclude>
> 				<exclude>**/log4j-*.xml</exclude>
> 			</excludes>
> 		</fileSet>
> 	</fileSets>
> 	<files>
> 		<file>
> 			<source>${project.build.outputDirectory}/com/foo/bar/cfg/jdbc-${environment}.properties</source>
> 			<outputDirectory>WEB-INF/classes/com/foo/bar/cfg/</outputDirectory>
> 			<destName>jdbc.properties</destName>
> 		</file>
> 		<file>
> 			<source>${project.build.outputDirectory}/com/foo/bar/cfg/log4j-${environment}.xml</source>
> 			<outputDirectory>WEB-INF/classes/</outputDirectory>
> 			<destName>log4j.xml</destName>
> 		</file>
> 	</files>
> </component>
> src/main/assembly/packaging-prod.xml
> ------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
> 			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 			xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1
> 								http://maven.apache.org/xsd/assembly-1.1.1.xsd">
> 	<id>prod</id>
> 	<formats>
> 		<format>war</format>
> 	</formats>
> 	<includeBaseDirectory>false</includeBaseDirectory>
> 	<componentDescriptors>
> 		<componentDescriptor>
> 			<pathToComponentDescriptor>src/main/assembly/component.xml</pathToComponentDescriptor>
> 			<parameters>
> 				<parameter>
> 					<name>environment</environment>
> 					<value>prod</value>
> 				</parameter>
> 			</parameters
> 		</componentDescriptor>
> 	</componentDescriptors>
> </assembly>
> src/main/assembly/packaging-stag.xml
> ------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
> 			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 			xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1
> 								http://maven.apache.org/xsd/assembly-1.1.1.xsd">
> 	<id>stag</id>
> 	<formats>
> 		<format>war</format>
> 	</formats>
> 	<includeBaseDirectory>false</includeBaseDirectory>
> 	<componentDescriptors>
> 		<componentDescriptor>
> 			<pathToComponentDescriptor>src/main/assembly/component.xml</pathToComponentDescriptor>
> 			<parameters>
> 				<!-- component descriptor specific parameters -->
> 				<parameter>
> 					<name>environment</environment>
> 					<value>stag</value>
> 				</parameter>
> 			</parameters>
> 		</componentDescriptor>
> 		</parameters>
> 			<!-- global parameters for all component descriptors -->
> 		</parameters>
> 	</componentDescriptors>
> </assembly>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira