7.1.5. Importing Java Modules Based on Build Units

You can import Java modules based on build units into an existing Sonargraph system or while creating a new system.

Note: This importer can only work when you have previously build your system (hence the name). Java class and source files are analyzed to obtain class and source root information. A build unit contains Java class and corresponding source roots and corresponds to a module.

In a multi-module system setup normally the modules share common root directory structures (or definitions). The following root directories could be used in such a multi module system:

  • ./src/main/java (Java production code)

  • ./src/test/java (Java test code)

  • ./target/generated (generated Java code)

  • ./target/classes (compiled Java production code)

  • ./target/classes-test (compiled Java test code)

The main idea of the build unit importer is to collect at least 1 root directory containing compiled Java code (i.e. byte code) and at least 1 root directory containing corresponding Java source code. The common root directory of both would compromise the module root directory. So lets say the directory 'Common' contains './src/main/java' and './target/classes' containing byte code and source code the build unit import would recognize 'Common' as a build unit (i.e. module) with 2 root directories.

The build unit importer uses 2 important terms:

  • Root Segment

    Begins with '/' followed by full directory name or a part of it. It has only 1 '/'! It is used to recognize Root Definitions.

    In order to recognize './src/main/java' from the above example it would be necessary to define 3 root segments: '/src', '/main' and '/java'.

  • Root Definition

    './src/main/java' from the above example would be a root definition. It consists of 1 or more '/' and full directory name pairs.

In general the following 3 steps need to be performed:

  • Select the directory containing the build units you want to detect. The wizard will detect Class/Source Root Definitions based on predefined Root Segments. The Root Segments can be modified to obtain better Class/Source Root Definition matches. This will trigger the re-detection of Class/Source Root Definitions. In Unassigned Class/Source Roots you will see all roots that are currently not assigned to any module candidate.

  • Adjust the Root Segments and/or Class/Source Root Definitions (via context menu entries 'Add...', 'Edit...' and 'Delete') and rerun the import candidate detection until you obtain the desired Sonargraph import candidates (i.e. modules and class/source root directories).

  • Tweak the obtained Sonargraph import candidates by including/excluding selected entries.

Some things to keep in mind:

  • The wizard detects only the root directories that are not already contained in the Sonargraph workspace.

  • Modules containing only source roots are not checked by default, since Sonargraph needs the class files too.

  • Module candidates can be renamed via the context menu 'Edit...' entry.

  • To reset the wizard to it's initial state simply open the 'Select Directory' dialog and close it with 'Cancel'.

  • You can either modify Root Segments, Root Definitions or both to obtain the desired Sonargraph import candidates.

  • In the Root Segments and Root Definitions viewers you can use a search widget to find entries. Ctrl+Shift+F on Windows and Linux and Cmd+Shift+F on Mac.