uPortal

Enterprise open source portal built by and for the higher education community.

This project is maintained by uPortal-Project

Architecture

Build Structure

uPortal leverages Gradle for build and package management. Gradle divides the work needed to build the portal into projects and tasks. Each logical grouping of code within the portal is its own subproject, and each subproject has a graph of tasks. Each task linking back to work (other tasks) that it depends on to function.

The most complete view of the task graph and build dependency structure comes from the gradle release task, seen below.

uPortal release task graph

There are some interesting architectural features that can be extracted from the overall task graph.

Code coupling

:notebook: N.B. JavaDoc tasks do tend to be highly linked together, however cross-linking across JavaDoc does not necessarily signal tight coupling.

Loosely Coupling

Loosely coupled subprojects will usually keep grouped together in the task graph, with limited linking out to other subprojects. For example: the five subprojects shown below are completely decoupled.

loose coupling in task graph

:notebook: N.B. JavaDoc tasks do tend to be highly linked together, however cross-linking across JavaDoc does not necessarily signal tight coupling.

Tightly coupling

Projects with tight coupling tend to be pulled toward the center of the graph, and have many lines going outward from their compileJava task. Projects that have many dependencies will appear toward the top of the graph, projects that are highly depended on toward the bottom. For example: the uPortal-security/uPortal-security-authn subproject depends on 23 other subprojects.

tight coupling in task graph