Guide to using Modello

Modello is a tool for generating resources from a simple model. From a simple model you can generate things like:

  • Java sources
  • XML serialization code for the model
  • XML deserialization code for model
  • Model documentation
  • XSD
  • JDO bindings

A typical modello model looks like the following:

<model>
  <id>archetype</id>
  <name>Archetype</name>
  <description><![CDATA[Maven's model for the archetype descriptor.]]></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>
        </field>
        <field>
          <name>allowPartial</name>
          <version>1.0.0</version>
          <required>true</required>
          <type>boolean</type>          
        </field>
        <field>
          <name>sources</name>
          <version>1.0.0</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>resources</name>
          <version>1.0.0</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>        
        <field>
          <name>testSources</name>
          <version>1.0.0</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>        
        <field>
          <name>testResources</name>
          <version>1.0.0</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>                
        <field>
          <name>siteResources</name>
          <version>1.0.0</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </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.0-alpha-18</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>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>