Login | Register
My pages Projects Community openCollabNet

2020-03-13: This site is going to be decommissioned and shut down very soon. Please copy and archive any data you wish to keep ASAP

2.2. Source layout

The development environment (source layout) of ArgoUML exists in two flavors:

  • The repository layout.

  • The Eclipse layout.

The repository layout is used by the nightly build, when building releases, and when doing development that is not done within Eclipse. This is the traditional layout and the checkout procedure is described in Section 2.5, “Downloading from the Subversion repository”.

The Eclipse layout is used when doing development within Eclipse. This was created to fit with Eclipse way of organizing projects. The checkout procedure is described in Section 2.9.3, “Checking out through Eclipse” and controlled by Eclipse PSF files.

The table below show how the code is organized in the different layouts.

Table 2.1. Layout differences

CodeRepository locationThe repository layoutThe Eclipse layout
Subsystems

http://argouml.tigris.org/
svn/argouml/
trunk/src/SUBSYSTEM-NAME

WORK/argouml/src/SUBSYSTEM-NAMEWORKSPACE/SUBSYSTEM-NAME
Integration scripts for the core application

http://argouml.tigris.org/
svn/argouml/
trunk/src/argouml-build/*

WORK/argouml/src/argouml-build/*WORKSPACE/argouml-build/* (optional)
Subsystems that are separate projects

http://PROJECT-NAME.tigris.org/
svn/PROJECT-NAME/
trunk

WORK/PROJECT-NAMEWORKSPACE/PROJECT-NAME
Integration resultN/AWORK/argouml/buildN/A
Tools used for building and testing. This is the tools common to several subsystems.

http://argouml.tigris.org/
svn/argouml/
trunk/tools

WORK/argouml/toolsWORKSPACE/argouml-tools
Tools used for release generation

http://argoumlinstaller.tigris.org/
svn/argoumlinstaller/
trunk/*

WORK/argoumlinstaller/N/A
Tools used for static checks

http://argouml-gen.tigris.org/
svn/argouml-gen/
trunk/tools

WORK/argouml-gen/toolsN/A
Documentation source

http://argouml.tigris.org/
svn/argouml/
trunk/documentation

WORK/argouml/documentationWORKSPACE/argouml-documentation
Eclipse PSF files

http://argouml.tigris.org/
svn/argouml/
trunk/www/psf

WORK/argouml/www/psf (not used)WORKSPACE/psf
Eclipse templates (to use in the workspace or import into each project)

http://argouml.tigris.org/
svn/argouml/
trunk/tools/eclipse

WORK/argouml/tools/eclipse (not used)WORKSPACE/argouml-core-tools/eclipse
Tools used for static checks

http://argouml-gen.tigris.org/
svn/argouml-gen/
trunk/tools

WORK/argouml-gen/toolsN/A ???
Src of released subsystem from core project

http://argouml.tigris.org/
svn/argouml/
releases/RELEASE-TAG/src/SUBSYSTEM-NAME

WORK/argoumlinstaller/build/
RELEASE-TAG/
argouml/src/
SUBSYSTEM-NAME

N/A or WORKSPACE/SUBSYSTEM-NAME (if switched to)
Src of released subsystem from other project

http://PROJECT-NAME.tigris.org/
svn/PROJECT-NAME/
releases/RELEASE-TAG

WORK/argoumlinstaller/build/
RELEASE-TAG/
PROJECT-NAME/

N/A or WORKSPACE/PROJECT-NAME (if switched to)

To handle the two layouts the following guidelines for writing ant scripts apply:

  • The same build.xml file is used, both for building from ant in the repository layout and in the Eclipse layout.

  • In argouml/src/subsystem/build.xml use ../subsystem/build/name to refer to files needed to compile and run tests.

    Only references to subsystems depended on are allowed.

    Table 2.2. Allowed subsystem dependencies

    ProjectDepends on (only)
    argouml-core-model-mdrargouml-core-infra, argouml-core-model
    argouml-core-model-eumlargouml-core-infra, argouml-core-model
    argouml-appargouml-core-infra, argouml-core-model (+ argouml-core-model-mdr but only for integration-level tests)
    argouml-core-diagrams-sequence2argouml-core-infra, argouml-core-model, argouml-app
    all other diagram subsystemsargouml-core-infra, argouml-core-model, argouml-app

  • The "jar" target in argouml/src/subsystem/build.xml compiles the code, creates the directory build within subsystem, and copies all exported jars there.

    Since this build depends on jars in depended on subsystems, the target should first run the "jar" target in those subsystems.

    Also jars that are not generated but provided by the subsystem are copied.

  • In the repository layout, the "package" target in argouml/src/argouml-build/build.xml compiles all subsystems, creates the directory build in argouml/src/argouml-build and copies all exported jars from all subsystems there.

    The copying only copies files and not directories. For that reason make sure everything that is exported is in files and everything that is not exported in directories.

    Specially generated java files, the class files as results of the compilation of source and tests, test results, javadoc report, and other generated reports shall be generated in directories to avoid being included in the release.

  • In the Eclipse layout, the "package" target in argouml-build/build.xml (same as above) compiles all subsystems, creates the directory ../argouml/build and copies all exported jars from all subsystems there.

    For this reason no Eclipse project shall be named "argouml".

    [Note]Note

    This is not yet (May 2008) implemented.

  • For Modules that are developed in separate Tigris projects in the argouml-name/build.xml file use ../argouml/build/name to refer to files needed to compile and run tests.

    Only references to subsystems depended on are allowed.

    Modules should probably depend on argouml-core-infra, argouml-core-model, and argouml-app and not anything else.

  • The "jar" target in argouml-name/build.xml compiles the code, creates the directory argouml-name/build, and copies all exported jars there.

  • The "install" target in argouml-name/build.xml performs the "jar" target and copies all jars needed by the deployed application to ../argouml/build/ext.

    The release script includes the files from there.

  • For the listed purposes, use the paths listed in the table, in all subsystems and modules.

    Table 2.3. Created things

    WhatWhere (under ./build)
    Result of the compilation of src/tree and src_generated/tree classes/tree
    Result of the compilation of tests/tree tests/classes/tree
    Generated java code../src_generated/tree
    XML result from tests tests/reports/junit/output/XML-files
    HTML result from tests tests/reports/junit/output/html/HTML-files
    Complete javadoc reportjavadocs
    Javadoc report exported functions onlyapi
    Instrumented classes from build/classes/tree instrumented/tree

  • Tools that reside in the tools directory are referenced using the property argo.tools.dir. Like this: ${argo.tools.dir}/path to the file

    The tools in question are the tools used for build and testing that are common to several subsystems.

  • Every build.xml file that uses tools from the tools directory shall set the argo.tools.dir property.

    This is done by testing for the existence of the candidate-dir/checkstyle/java.header file and the result should be set to:

    • ../../tools for subsystems in the repository layout.

    • ../argouml-core-tools for subsystems in the Eclipse layout.

    • ../../tools for argouml-build in the repository layout.

    • ../argouml-core-tools for argouml-build in the Eclipse layout.

    • ../tools for documentation in the repository layout.

    • ../argouml-core-tools for documentation in the Eclipse layout.

    • ../argouml/tools for other Tigris projects in the repository layout.

    • ../argouml-core-tools for other Tigris projects in the Eclipse layout.