The development environment (source layout) of ArgoUML exists in two flavors:
- Repository Layout
- 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 |
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. |
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 |
WORK/argouml-gen/tools |
N/A |
|
Documentation source |
WORK/argouml/documentation |
WORKSPACE/argouml-documentation |
|
Eclipse PSF files |
WORK/argouml/www/psf (not used) |
WORKSPACE/psf |
|
Eclipse templates (to use in the workspace or import into each project) |
WORK/argouml/tools/eclipse (not used) |
WORKSPACE/argouml-core-tools/eclipse |
|
Tools used for static checks |
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.