Rio provides the ability to deploy and provision service artifacts and their dependencies. The resolution of artifacts is done from configured repositories, and becomes a natural extension of the build, test and deploy lifecycle.
As Rio deploys services, service artifacts and dependencies are automatically provisioned and installed on compute resources that meet declared requirements of services being deployed.

Rio addresses the issue of duplicating dependency management configuration between the development and deployment phases by ensuring that the versioned components that have been used in development, test and qualification are seamlessly carried over.
The Rio Resolver currently resolves artifacts using configured Maven 2 repositories. Using the declaration(s) found in Maven POMs and settings. The Rio Resolver is not provided by Maven, the Rio Resolver simply uses Maven repositories to obtain declared artifacts and dependencies.
Why not use Maven to resolve artifacts and dependencies for service provisioning?
Artifacts are referenced in abstract terms (groupId:artifactId:[classifier:]version), rather than a (logical) file path. This is the big difference with the use of artifacts in opstrings with Rio. Previously, you declared jars as resources for both the interface and service implementation classes. With the introduction of artifact declaration in opstrings, you now just declare the groupId:artifactId:[classifier:]version instead.
The benefits here are that the declared artifact, it's dependencies and any transitive dependencies are resolved. If the machine the Monitor or Cybernode is executing on does not have the required jars available, they will be provisioned. Its that simple.
Declaring artifacts in opstrings follows the same conventions that Maven uses. Take a look at the example below:

The keyword artifact in the DSL (or Artifact in an XML document) triggers artifact resolution. You cannot have both artifact resolution and resource declarations in the same opstring.
You can also include other opstrings using an artifact. This allows external services to be included in the activation of your application.

The included artifact is resolved from configured repositories. The artifact must have a .oar extension. Once located, the resolved OAR is included in the deployment and subsequent management of the declared service(s).
OAR artifact inclusion is only supported with Groovy based opstrings.
Artifacts and dependencies are resolved from repositories. The Rio resolver obtains repository configuration from POMs and from your settings.xml. When service artifacts are being resolved, repository configurations are lazily obtained, appending configured repository definitions from POMs (if declared), and filtering them against any declared mirror declarations in settings.xml. Maven central is always included last.
It is generally a good idea that the <repositories>
section be removed from POMs, and repositories be specified only in
settings.xml. This makes for cleaner and predictable
deployments.
By translating groupId:artifactId:[classifier:]version to groupId/artifactId/version we can derive the location of the artifact and download it to the (configured) local repository. If there are issues with the message digests not matching, the retrieval of the artifact is retried. If there are still issues with the message digests not matching, the Rio Resolver will not provision the artifact. In Maven terms, this follows a checksumPolicy set to fail.
We highly recommend the use of a repository manager.
The resolution of an artifacts dependencies that have a "dl" classifier is scoped to only include declared dependencies that also have a "dl" classifier. If a service has a dependency on another service for compilation, and requires classes (is a client of) of that service's "dl", you need to declare a dependency for that artifact with the "dl" classifier.
If a service's "dl" has a dependency that is not packaged with a "dl" classifier you have two options: