Login | Register
My pages Projects Community openCollabNet

argouml
Wiki: Source layout

Edit this page | Links to this page | Page information | Attachments | Refresh page

 

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

  1. Repository Layout
  2. Eclipse Layout

Repository 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 idea governing this layout is that the checkout and build commands are similar for all projects. Like this:

svn co http://argouml.tigris.org/svn/argouml/trunk argouml
svn co http://argouml-cpp.tigris.org/svn/argouml-cpp/trunk argouml-cpp
svn co http://argouml-de.tigris.org/svn/argouml-de/trunk argouml-de
...

cd argouml
ANT install
cd ..
cd argouml-cpp
ANT install
cd ..
cd argouml-de
ANT install
cd ..
...

ANT is provided in argouml/tools/apache-ant-1.7.0. The result is located in argouml/build.

Eclipse Layout

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.

Code

Repository location

Repository layout

Eclipse layout

Subsystems

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

WORK/argouml/src/SUBSYSTEM-NAME

WORKSPACE/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-NAME

WORKSPACE/PROJECT-NAME

Integration result

N/A

WORK/argouml/build

N/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/tools

WORKSPACE/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/tools

N/A

Documentation source

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

WORK/argouml/documentation

WORKSPACE/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/tools

N/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, use the following guidelines for writing ANT scripts:

  • 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 Allowed subsystem dependencies

    Project

    Depends on (only)

    argouml-core-model-mdr

    argouml-core-infra, argouml-core-model

    argouml-core-model-euml

    argouml-core-infra, argouml-core-model

    argouml-app

    argouml-core-infra, argouml-core-model (+ argouml-core-model-mdr but only for integration-level tests)

    argouml-core-diagrams-sequence2

    argouml-core-infra, argouml-core-model, argouml-app

    all other diagram subsystems

    argouml-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: 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

    What

    Where (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 report

    javadocs

    Javadoc report exported functions only

    api

    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.

This reduces the number of dependencies to a certain file (or files) and removes the need to have the file(s) available to calculate paths.

If the location of the tools directory ever changes, there will be a major problem updating all projects.


CategoryFromCookbook

Source layout (last edited 2009-10-02 13:08:57 -0800 by ?zearin)