<?xml version="1.0"?>
<!--
 * 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.
-->
<document>
 <properties>
  <title>Building Commons SCXML</title>
  <author email="dev@commons.apache.org">Commons Documentation Team</author>
 </properties>
<body>
<!-- ================================================== -->
<section name="Overview">
<p>
  Commons SCXML uses <a href="http://maven.apache.org">Maven</a> or
  <a href="http://ant.apache.org">Ant</a> as a build system. The source is
  <a href="http://svn.apache.org/repos/asf/commons/proper/scxml/trunk/">here</a>.
</p>
</section>
<!-- ================================================== -->
<section name="Maven Goals">
  <p>
    To build a jar file, change into SCXML's root directory and run "maven jar".
    The result will be in the "target" subdirectory.
  </p>
  <p>
    To build the Javadocs, run "maven javadoc".
    The result will be in "target/docs/apidocs".
  </p>
  <p>
    To build the full website, run "maven site". The result will be in "target/docs".
  </p>
  <p>
    To build the site, you need Maven 1.0.2 and version 1.9.2 of the maven-xdoc-plugin installed.
  </p>

</section>
<!-- ================================================== -->
<section name="Ant Goals">
  <p>
    To build a jar file, change into SCXML's root directory and run "ant jar".
    The result will be in the "target" subdirectory.
  </p>
  <p>
    To build the Javadocs, run "ant javadoc".
    The result will be in "dist/docs".
  </p>
</section>
<!-- ================================================== -->
</body>
</document>
