 ------
 Guide to using Modello
 ------
 Jason van Zyl
 Hervé Boutemy
 ------
 2009-03-01
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Guide to using Modello

 {{{https://codehaus-plexus.github.io/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

 []

 A typical modello model looks like the following:

%{snippet|id=modello-model|url=https://svn.apache.org/repos/asf/maven/archetype/trunk/archetype-common/src/main/mdo/archetype.mdo}

 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>

+----+
