This is a documentation on how the Audiveris project is now structured. It has evolved from a single project to a tree of Gradle sub-projects for better modularity.
- Divide the old monolith project into more modular sub-projects, each with a well-defined objective.
- Prohibit any duplication of information (such as the required Java version) to avoid inconsistencies.
- Use high-level standard tools (such as Gradle predefined tasks and plugins) rather than having to develop and maintain ad hoc procedures.
- Delegate to GitHub workflow actions the building, packaging and releasing of the project artifacts.
There is one folder per sub-project, each with its own build.gradle pilot file
| Sub-project | Purpose | Documentation |
|---|---|---|
app |
The application | app/README.md |
docs |
Building handbook in web and pdf formats | docs/README.md |
packaging |
Building all OS-specific installers | packaging/README.md |
flatpak |
Building Linux/Flatpak | flatpak/README.md |
schemas |
Building the schemas-based documentation | schemas/README.md |
Below is a simplified overall tree structure, centered on the main files. The order is not strictly alphabetical, in order to group the entities by role.
. ├── .github │ └── workflows │ ├── build-and-test.yml │ ├── draft-release.yml │ └── flatpak.yml │ ├── project-structure.md // This file! │ ├── README.md // Introduction of Audiveris application │ ├── settings.gradle // Definition of the project structure │ ├── gradle │ └── wrapper ├── gradle.properties // Definition of 'the' main variables │ ├── app │ ├── build.gradle │ └── src │ └── ... // a whole tree of main and test .java files │ ├── docs │ ├── build.gradle │ ├── _config.yml │ ├── _pages │ └── pdf │ ├── pdf-build.sh │ └── pdf-nav-style.css │ ├── packaging │ ├── build.gradle │ └── dev │ └── omr.properties │ ├── flatpak │ ├── build.gradle │ ├── dev │ │ └── org.audiveris.audiveris.template.yml // Template for flatpak-builder manifest │ ├── res │ │ ├── org.audiveris.audiveris.desktop │ │ └── org.audiveris.audiveris.metainfo.xml │ └── flathub // Git submodule │ └── schemas ├── build.gradle └── xs3p.xsl
Below are the unique locations, relative to the project root, where the Audiveris key parameters are defined and can be modified manually.
Gradle definition of project structure.
| Variable name | Variable role | Current value |
|---|---|---|
rootProject.name |
Project name | Audiveris |
Definition of the desired Gradle version.
| Variable name | Variable role | Example value |
|---|---|---|
distributionUrl |
URL for Gradle wrapper | https://services.gradle.org/distributions/gradle-9.0-all.zip |
distributionSha256Sum |
SHA256 for Gradle wrapper | 8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b |
Definition of 'the' main variables.
| Variable name | Variable role | Example value |
|---|---|---|
theMinJavaVersion |
Minimum Java version | 24 |
theTessdataTag |
Tesseract languages version | 4.1.0 |
Definition of Audiveris precise version.
| Variable name | Variable role | Exxample value |
|---|---|---|
project.version |
Audiveris precise version. Format: Major.minor.suffix |
5.7.0 |
Definitions for the handbook documentation.
Note: It should be possible to determine these values automatically from the variables listed above. But unfortunately, as of this writing, these values must be entered manually...
| Variable name | Variable role | Example value |
|---|---|---|
audiveris_functional_version |
Audiveris functional version for handbook. Format: Major.minor |
5.7 |
master_java_version |
Minimum Java version for the master branch | 24 |