RichFaces 4.0 Build & Directory Structure

     

    GitHub repositories root: https://github.com/richfaces

    Fisheye is currently in progress of migration

    Framework Modules

    The latest updates, and features of the project are located in the master branch of following repositories:

     

    build                  richfaces-root-aggregator
         /bom              richfaces-bom
         /parent           richfaces-root-parent
         /dist             richfaces-aggregator
    cdk                    richfaces-cdk
    core                   richfaces-core-{api,impl}
    components             richfaces-ui-*
         /dist             richfaces-components-{api,impl}
    dev-examples               demos
    showcase               richfaces-showcase
    archetypes             richfaces-archetype-simpleapp
    

    Framework Build Resources

     

    parent                 richfaces-parent
    checkstyle             richfaces-checkstyle
    shade-transformers     richfaces-shade-transformers
    vdl-doc                faces-vdl-documentation
    
    

     

     

    Separated Modules

    docs

    RichFaces Framework Documentation

     

    sandbox

    When components, examples, or other items are in prototyping, or early development they are placed into the /sandbox directory following the structure shown below.  TODO: link to sandbox process documents

     

    qa

    Testing applications and tests by RichFaces Quallity Assurance team.

     

    Parents, BOMs, and Aggregators and Distribution

    The RichFaces project follows a well established maven project structure where we have defined parent, aggregators, and a Bill of Materials (BOM) projects.

     

    build/bom

    Defines all runtime dependencies for RichFaces, and can be imported by examples, and application developers to inherit the required project dependencies, and versions.  See How to add RichFaces 4.x to maven based project

    for more.

    build/parent

    The RichFaces project actually has several primary "parent" modules.  You could think of these parent projects and parent, grandparents, and great-grandparents.  The idea here is to centralize as many common settings, and information as possible, while allowing sub-projects to update as needed.

     

    • richfaces-parent
      • The great-grandparent for everything in RichFaces
      • Contains basic license, project, repository information
      • Released rarely, and separately from main project in /trunk
    • richfaces-root-parent
      • The grandparent for framework modules
      • Contains more specific build, test dependencies, plugin, and release specific settings
    • richfaces-xxx-parent
      • The direct parent for a sub-project
        • /trunk/xxx/parent
      • Many of the major sub-projects contain their own parent
      • Defines any module specific settings

     

    build/dist

    Contains the top level assembler for construction of the the primary project release artifacts.

     

    aggregators

    Aggregators pom.xml files profile a common root for sub-projects, and track modules to include in the build.  They contain almost no other build information.  So for example http://anonsvn.jboss.org/repos/richfaces/trunk/ui/pom.xml simple states what modules are build as part of this build.


     

    The root aggregator contain a small amount of additional settings related to release, but in general if build configuration is going here it probably needs to be moved.

    Pom Inheritance Guidelines

    To support this structure there is a requirement in the order of inheritance of the various pom, bom files.

     

    [richfaces-parent] ---> [richfaces-root-parent (imports richfaces-bom)] --> [richfaces-<module>-parent] --> [sub-project pom.xmls]

     

    Module sub-projects only need to use the module parent as it's parent.  Aggregators can simply inherit from richfaces-parent as they have very few requirements.

    Module Details & Descriptions

    cdk

    Primary modules for the component development kit.

    core

    The RichFaces core API, and implementations.  This is the common base and functionality for the project components.

     

    core

    Contains classes, and resources that are common and shared across two or more of the /ui-* modules.

     

    components

    Starting in RichFaces 4.0 we are going to separate components by type.  This makes it easier to work with a sub-set of components at once, and logically breaks up functionality.

    components/dist

    The ui modules require a top level assembler to be able to package and combine the component artifacts.  This uses the maven-shade plugin to handle the merging of jars.

    dev-examples

    Since examples are consumers of RichFaces, and not directly part of the runtime they do not have to follow the module requirements above.  The examples all share a common richfaces-example-parent.  However they must demonstrate proper usage of the project bom's.

     

    showcase

    RichFaces Showcase is main demonstrastion example of framework usage.

     

    other examples

    Development examples may be promoted to top-level repository since they can be consumed for demonstration purposes.

    current examples: tweetstream

    archetypes

    Contains RichFaces archetypes

    tests

    Contains all QE related sub-projects, functional, and integration tests.  Although this module is not required to follow the same guidelines as the core modules it should strive to conform, and be accessible and useable to outside developers.

    docs

    Contains all project wide documentation, such as development guide, migration guide, etc....  It has its own specific dependencies and build process.