Modello is a tool for generating resources from a simple model. From a simple model you can generate things like:
A typical modello model looks like the following:
- <model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd"
- xml.namespace="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/${version}"
- xml.schemaLocation="http://maven.apache.org/xsd/archetype-${version}.xsd">
- <id>archetype</id>
- <name>Archetype</name>
- <description>
- <![CDATA[Maven's model for the old archetype descriptor (ie for Archetype 1.0.x).
- <p>The metadata about an archetype is stored in the <code>archetype.xml</code> file located
- in the <code>META-INF/maven</code> directory of its jar file.</p>]]>
- </description>
- <defaults>
- <default>
- <key>package</key>
- <value>org.apache.maven.archetype.model</value>
- </default>
- </defaults>
- <classes>
- <class rootElement="true" xml.tagName="archetype">
- <name>ArchetypeModel</name>
- <description>Describes the assembly layout and packaging.</description>
- <version>1.0.0</version>
- <fields>
- <field>
- <name>id</name>
- <version>1.0.0</version>
- <required>true</required>
- <type>String</type>
- <description><![CDATA[The value should be the same as the artifactId in the archetype <code>pom.xml</code>.]]></description>
- </field>
- <field>
- <name>allowPartial</name>
- <version>1.0.0</version>
- <type>boolean</type>
- <description><![CDATA[Setting this option to <code>true</code> makes it possible to run the
- <code>archetype:create</code> even on existing projects.]]></description>
- </field>
- <field xdoc.separator="blank">
- <name>sources</name>
- <version>1.0.0</version>
- <description><![CDATA[Files that will go into <code>src/main/java</code>.]]></description>
- <association>
- <type>Source</type>
- <multiplicity>*</multiplicity>
- </association>
- </field>
- <field>
- <name>resources</name>
- <version>1.0.0</version>
- <description><![CDATA[Files that will go into <code>src/main/resources</code>.]]></description>
- <association>
- <type>Resource</type>
- <multiplicity>*</multiplicity>
- </association>
- </field>
- <field xdoc.separator="blank">
- <name>testSources</name>
- <version>1.0.0</version>
- <description><![CDATA[Files that will go into <code>src/test/java</code>.]]></description>
- <association xml.tagName="source">
- <type>Source</type>
- <multiplicity>*</multiplicity>
- </association>
- </field>
- <field>
- <name>testResources</name>
- <version>1.0.0</version>
- <description><![CDATA[Files that will go into <code>src/test/resources</code>.]]></description>
- <association xml.tagName="resource">
- <type>Resource</type>
- <multiplicity>*</multiplicity>
- </association>
- </field>
- <field xdoc.separator="blank">
- <name>siteResources</name>
- <version>1.0.0</version>
- <description><![CDATA[Files that will go into <code>src/site</code>.]]></description>
- <association xml.tagName="resource">
- <type>Resource</type>
- <multiplicity>*</multiplicity>
- </association>
- </field>
- </fields>
- </class>
- <class>
- <name>Source</name>
- <description>Describes a source file. Note that source files are always filtered, unlike resources that
- can be non-filtered.</description>
- <version>1.0.0</version>
- <fields>
- <field xml.content="true">
- <name>file</name>
- <version>1.0.0</version>
- <type>String</type>
- <description><![CDATA[The source file.]]></description>
- </field>
- <field xml.attribute="true">
- <name>encoding</name>
- <version>1.0.0</version>
- <type>String</type>
- <description><![CDATA[The encoding to be used when reading/writing this file.
- Platform encoding is used by default, or ISO-8859-1 when filename ends in <code>.properties</code>]]></description>
- </field>
- </fields>
- </class>
- <class>
- <name>Resource</name>
- <description>Describes a resource file.</description>
- <version>1.0.0</version>
- <fields>
- <field xml.content="true">
- <name>file</name>
- <version>1.0.0</version>
- <type>String</type>
- <description><![CDATA[The resource file.]]></description>
- </field>
- <field xml.attribute="true">
- <name>encoding</name>
- <version>1.0.0</version>
- <type>String</type>
- <description><![CDATA[The encoding to be used when reading/writing this file.
- Platform encoding is used by default, or ISO-8859-1 when filename ends in <code>.properties</code>]]></description>
- </field>
- <field xml.attribute="true">
- <name>filtered</name>
- <version>1.0.0</version>
- <type>boolean</type>
- <defaultValue>true</defaultValue>
- <description>A resource can be filtered, which means the file will be used as Velocity template.
- It can be non-filtered, which means the file will be copied without modification.</description>
- </field>
- </fields>
- </class>
- </classes>
- </model>
To utilize Modello you would configure the maven-modello-plugin something like the following where you want to generate the Java sources for the model, the xpp3 serialization code and the xpp3 deserialization code:
- <project>
- ...
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.modello</groupId>
- <artifactId>modello-maven-plugin</artifactId>
- <version>1.8.3</version>
- <executions>
- <execution>
- <goals>
- <!-- Generate the xpp3 reader code -->
- <goal>xpp3-reader</goal>
- <!-- Generate the xpp3 writer code -->
- <goal>xpp3-writer</goal>
- <!-- Generate the Java sources for the model itself -->
- <goal>java</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <models>
- <model>src/main/mdo/descriptor.mdo</model>
- </models>
- <version>1.0.0</version>
- <useJava5>true</useJava5>
- </configuration>
- </plugin>
- </plugins>
- </build>
- ...
- </project>