Skip to content

1.2. Group and Artifact ID's

Steve Maring edited this page Jun 5, 2018 · 29 revisions

Group ID

The following prefixes should be used for artifact's Group IDs:

  • org.hitachivantara for CE projects
  • com.hitachivantara for EE projects

Whenever possible, complement the above prefixes providing a plausible group name for your project in the form of <prefix>.<sub-group>. For example, org.hitachivantara.workernodes.

In most scenarios, unless there is a clear logical and functional division, the groupId should be common to all the modules in the project. This provides an easier way to search for all the modules of a project. In the cases where there is a need to have a functional division within the project, that can be included in the groupId. For example org.hitachivantara.reporting.designer and org.hitachivantara.reporting.libraries.

Artifact ID

The artifactId of the modules in your project should be descriptive of what the module represents within the project.

Use the following guidelines when defining the artifactId's:

  • The root module of a project should be the name of the project. If this is not possible, because the name is required by another module (an assembly for example), append the "-parent" or "-modules" suffix.
  • An api module should have the "-api" suffix.
  • An impl module should have the "-impl" suffix.
  • The assemblies module, when existing as a parent, should have the suffix "-assemblies".
  • For the time being, due to a plugin limitation, feature assemblies have specific artifactId rules. See here for more information.

Avoid doing the following:

  • Prefixing artifactId's with hitachivantara. This adds no extra information and therefore has no value.
  • Adding redundant information such as the suffixes "-pom" or "-jar" to the artifactId.

Examples

Basic project example

my-project                 org.hitachivantara.myproject:my-project
├── api                              -          :my-project-api
├── impl                             -          :my-project-impl
└── assemblies                       -          :my-project-assemblies
    ├── feature                      -          :pentaho-my-project
    └── plugin                       -          :my-project-plugin

Multi module project example

my-project                 org.hitachivantara.myproject:my-project
├── apis                             -          :my-project-apis
│   ├── rest                         -          :my-project-rest-api
│   └── java                         -          :my-project-java-api
├── impls                            -          :my-project-impls
│   ├── rest                         -          :my-project-rest-impl
│   └── java                         -          :my-project-java-impl
└── assemblies                       -          :my-project-assemblies
    ├── feature                      -          :hitachivantara-my-project
    └── plugin                       -          :my-project-plugin

Very basic project example

my-project                 org.hitachivantara.myproject:my-project
├── impl                             -          :my-project-impl
└── assembly                         -          :my-project-plugin

Multi module complex project example

my-project                 org.hitachivantara.myproject:my-project
├── core                             -          :core
│   ├── api                          -          :core-api
│   ├── impl                         -          :core-impl
│   └── assembly                     -          :hitachivantara-my-project-core
├── client                           -          :client
│   ├── apis                         -          :client-apis
│   │   ├── visualisation            -          :client-visualization-api
│   │   └── edition                  -          :client-edition-api
│   ├── impls                        -          :client-impls
│   │   ├── visualisation            -          :client-visualization-impl
│   │   └── edition                  -          :client-edition-impl
│   └── assemblies                   -          :client-assemblies
│       ├── feature                  -          :hitachivantara-my-project-client
│       └── package                  -          :client-package
└── server                           -          :server
    ├── apis                         -          :server-apis
    │   ├── crud                     -          :server-crud-api
    │   └── credit                   -          :server-credit-api
    ├── impls                        -          :server-impls
    │   ├── crud                     -          :server-crud-impl
    │   └── credit                   -          :server-credit-impl
    └── assemblies                   -          :server-assemblies
        ├── war                      -          :server-war
        ├── package                  -          :server-package
        └── feature                  -          :pentaho-my-project-server

Multi module complex project example with sub-groups

my-project                 org.hitachivantara.myproject:my-project
├── client                 org.hitachivantara.myproject.client:client-modules
│   ├── visualisation                -                 :visualisation
│   │   ├── api                      -                 :visualization-api
│   │   └── impl                     -                 :visualisation-impl
│   ├── edition                      -                 :edition
│   │   ├── api                      -                 :edition-api
│   │   └── impl                     -                 :edition-impl
│   └── transaction                  -                 :transaction
│       ├── api                      -                 :transaction-api
│       └── impl                     -                 :transaction-impl
├── server                 org.hitachivantara.myproject.server:server-modules
│   ├── payment                      -                 :payment
│   │   ├── api                      -                 :payment-api
│   │   └── impl                     -                 :payment-impl
│   └── audit                        -                 :audit
│       ├── api                      -                 :audit-api
│       └── impl                     -                 :audit-impl
└── assemblies             org.hitachivantara.myproject:my-project-assemblies
    ├── client                       -          :my-project-client
    └── server                       -          :my-project-server