<?xml version="1.0"?>
<!--
Copyright 1999-2006 The Apache Software Foundation
Licensed 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.
-->
<!--
// ======================================================================== 78
-->
<document>

    <properties>
        <title>Acquiring</title>
    </properties>

    <body>
        <a name="Acquiring"/>
        <section name="Acquiring Apache Struts products">

            <p>
                Apache Struts products are made available to the public at no
                charge
                in both binary and source distributions under the
                <a href="http://apache.org/licenses/">Apache Software
                    License</a>
                .
                Each subproject offers a production release, as well as a
                milestone
                releases and "nightly" development builds.
                Individual JARs are also made available through
                <a href="http://maven.apache.org">Apache Maven</a>
                repositories,
                like
                <a href="http://ibiblio.org">ibiblio</a>
                .
            </p>

            <subsection name="Releases and Milestone Builds">
                <a name="ReleasesAndMilestones"/>
                <p>
                    Releases and milestone builds of Struts products are
                    available from
                    the main Apache Struts distribution site, or from mirror
                    sites.
                </p>
                <ul>
                    <li>
                        <strong>General Availability (GA) Releases</strong>
                        <ul>
                            <li>
                                <a href="http://struts.apache.org/download.cgi">
                                    Struts 1.2.8
                                </a>
                            </li>
                            <li>
                                <a href="http://struts.apache.org/download.cgi">
                                    Struts Scripting 1.0.1
                                </a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <strong>Older Releases</strong>
                        are available from the
                        <ul>
                            <li>
                                <a href="http://archive.apache.org/dist/struts/">
                                    Archive Site
                                </a>
                            </li>
                        </ul>
                    </li>
                </ul>
            </subsection>

            <a name="DevelopmentBuilds"/>
            <subsection name="Development Builds">

                <p>
                    The latest
                    <em>development build</em>
                    of Struts products are available
                    <a href="http://svn.apache.org/dist/struts/">here</a>
                    in binary, source and library distributions.
                    Library distributions include any external depdencies
                    needed to use a product with your application.
                </p>

                <p>
                    Development builds are being reviewed for quality
                    by the Apache Struts community.
                    When a build is judged "ready for prime time",
                    it is promoted to "General Availability" status and may be
                    made
                    the "Best Available" release.
                    If the community feel that a build requires more testing,
                    then it may be marked with "Beta" status.
                </p>

            </subsection>

            <a name="NightlyBuilds"/>
            <subsection name="Nightly Builds">

                <p>
                    For developers who are helping to create and maintain
                    Struts products,
                    or who just want "the latest bits",
                    the latest development version is made available each
                    morning.
                    Use at your own risk!
                </p>

                <p>
                    Apache Struts development builds are managed using
                    <a href="http://maven.apache.org/">Apache Maven</a>
                    .
                    Maven acquires the various JARs needed by Struts products
                    and automaticaly shares JARs between Struts subprojects
                    and other
                    Maven projects.
                </p>

                <ul>

                    <li>
                        <a href="http://svn.apache.org/builds/struts/maven/">
                            Nightly Builds</a>
                        .
                    </li>

                </ul>

                <p>
                    Be sure to check the Release Notes for a nightly build,
                    so you have a better idea of what you are getting!
                </p>

            </subsection>

            <a name="SourceCode"/>
            <subsection name="Source Code">

                <p>
                    Access to the Apache Struts source repository is available
                    through
                    both
                    <a href="http://svn.apache.org/viewcvs.cgi/struts/action/trunk/?root=Apache-SVN">
                        web browser</a>
                    and
                    <a href="http://subversion.tigris.org/">
                        Subversion client</a>
                    interfaces.
                </p>

                <p>
                    To download the trunk (HEAD revision) of any Struts
                    subproject,
                    a convenience directory has been added, named
                    <b>current</b>
                    .
                    The current directory uses a Subversion feature called
                    externals
                    which stores properties on the directory.
                    With those properties,
                    Subversion has all the information it needs to
                    automaticaly download
                    the head revision of all the Struts subprojects.
                </p>

                <p>
                    With the
                    <a href="http://subversion.tigris.org/">Subversion
                        client</a>
                    installed, obtaining a working copy of the Struts codebase
                    is as simple as
                </p>

                <code>&gt; svn checkout
                    http://svn.apache.org/repos/asf/struts/current</code>

                <p>
                    While Externals work well in practice, there are caveats.
                    For example,
                    since all the subdirectories are still really different
                    slices
                    from the repository,
                    relative paths might not work the way you expect.
                    For more, see the
                    <a href="http://svnbook.red-bean.com/en/1.1/ch07s04.html">
                        Externals
                        Definitions</a>
                    section of the
                    <a href="http://svnbook.red-bean.com/">Subversion Book</a>
                    .
                </p>


                <p>
                    To check out individual sub-projects from the Subversion
                    repository,
                    you can specify one of the following URLs:
                </p>

                <ul>
                    <li>
                        http://svn.apache.org/repos/asf/struts/action/trunk</li>
                    <li>http://svn.apache.org/repos/asf/struts/apps/trunk</li>
                    <li>http://svn.apache.org/repos/asf/struts/el/trunk</li>
                    <li>
                        http://svn.apache.org/repos/asf/struts/faces/trunk</li>
                    <li>http://svn.apache.org/repos/asf/struts/flow/trunk</li>
                    <li>
                        http://svn.apache.org/repos/asf/struts/sandbox/trunk</li>
                    <li>
                        http://svn.apache.org/repos/asf/struts/scripting/trunk</li>
                    <li>
                        http://svn.apache.org/repos/asf/struts/shale/trunk</li>
                    <li>
                        http://svn.apache.org/repos/asf/struts/taglib/trunk</li>
                    <li>
                        http://svn.apache.org/repos/asf/struts/tiles/trunk</li>
                </ul>

                <p>
                    (Committers with write access should use the
                    <strong>https</strong>
                    protocol instead.
                    See the ASF
                    <a href="http://www.apache.org/dev/version-control.html#https-svn">
                        Source Code Repositories</a>
                    page for details.)
                </p>

                <p>
                    <strong>Warning:</strong>
                    If you try to check out everything under 'struts',
                    be aware that you will get not just the most recent code
                    ('trunk'),
                    but a copy of every tag and branch ever created
                    for Struts.
                    A complete checkout of Struts from day one, including all
                    the branches,
                    will take some time and might max out your disk volume!
                </p>

                <p>
                    For more about using version control systems at Apache,
                    see the ASF's
                    <a href="http://www.apache.org/dev/version-control.html#anon-svn">
                        Source Code Repositories</a>
                    page.
                    For more about how Apache Struts uses Subversion, see our
                    <a href="http://wiki.apache.org/struts/StrutsMaintenanceSvn">
                        Subversion wiki page</a>
                    .
                </p>

            </subsection>

            <a name="Building"/>
            <subsection name="Building Struts">

                <p>
                    If you are building a Struts subproject from source,
                    we recommend that you install and use
                    <a href="http://maven.apache.org">
                        Apache Maven</a>
                    1.0.2,
                    since Maven will acquire whatever external JARs your
                    system may need.
                    Of course,
                    you can still use your build system of choice to build
                    your own
                    applications!
                </p>

                <p>
                    With Maven installed, building the entire Struts codebase
                    is as simple as
                </p>

                <code>/current/build/&gt; maven build-all</code>

                <p>
                    Maven will automatically download any dependencies as
                    needed.
                </p>

                <p>
                    For more about using Maven to build Apache Struts,
                    see our
                    <a href="http://wiki.apache.org/struts/StrutsMaintenanceMaven">
                        Maven wiki page</a>
                    .
                </p>

            </subsection>

        </section>

        <section>
            <p class="right">
                Next:
                <a href="bylaws.html">PMC Bylaws</a>
            </p>
        </section>

    </body>
</document>
