This version replaces v1.0:[EMAIL PROTECTED]&ms


The key aims of this proposal are:
. language and artifact neutrality.
  It should be possible to support multiple languages and
  their artifacts, not just java.

. it should be possible for users to easily navigate
  the repository and locate artifacts, including
  jars and release distributions.
  Compare this with the existing approach of separating
  release distributions ( and jars

. it should be possible for tools to construct a URI
  to locate an artifact using a set of known criteria


All files in the repository are artifacts. There is no distinction
between artifacts and meta-data. Any relationships between artifacts
is determined by supporting tools.

Repository URI Components

An absolute repository URI is written as follows:

  repository-uri = access-specifier "/" product-specifier "/"
                   version-specifier "/" artifact-specifier

Access specifier

The access specifier determines the scheme, authority, and optional
repository directory prefix. There is currently no requirement for
ftp, scp or file based access - only http is supported:

  access-specifier = http-access-specifier
  http-access-specifier = "http://"; authority "/" [directory "/"]
  directory = path_segments

  (authority and path_segments are per

<directory> is used when the repository cannot be located at
the root of an absolute URI.

URI examples:

Product specifier

The product specifier specifies the organisation and project:

  product-specifier = organisation "/" project
  organisation = name-segments
  project = name-segment
  name-segments = name-segment *( "/" name_segment)
  name-segment = nchar+
  nchar = alphanum | escaped | "_" | "-" | "!" | "~" | "@" | "&"

  (alphanum and escaped are per

<organisation> is the organisation name. It is arbitrary,
but should be globally unique. It could be the domain name,
or reverse domain name, with "." replaced by "/", e.g:
  "sun/com", "org/apache"
or simply the name of the organisation, e.g "oracle".

<project> is the project name. It is unique within an organisation.
E.g, "ldap", "jndi", "maven", "commons-logging".

URI examples:

Version specifier

The version specifier specifies the version of the project:

   version-specifier = name-segments

For the purposes of this proposal, version-specifier is opaque -
its format is determined by language and deployment best practices.

Some possible examples include:
 "1.0", "v0.9-beta", "nightly/20031113", "latest", "release/1.5.4"

URI examples:

Artifact specifier

The artifact specifier uniquely identifies an artifact within a
project version:
  artifact-specifier = name-segments

For the purposes of this proposal, artifact-specifier is opaque -
its format is determined by language and deployment best practices.

Some possible examples include:

URI examples:


Of the URI components:
. <access-specifier> and <product-specifier> are common accross
  all languages and deployments.
. <version-specifier> is subject to language or deployment
  best practices
. <artifact-specifier> is subject to language, deployment, artifact, or
  project best practices

It is envisioned that there will be different repository deployment
and query tools developed for each language. A generic tool cannot
be written without providing supporting meta-data, which is outside
the scope of this proposal.

Projects should be able to deploy arbitrary artifacts to the
repository, whether they be for end-users, or meta-data (e.g, maven's
project.xml). Tools should ignore any artifact they don't understand.

To ensure interoperability between language-based tools, best-practice
guidelines need to be drawn up for each supported language and deployment


Changes from v0.1

. repository-uri changed from:
    access-specifier "/" product-specifier "/" artifact-specifier
    access-specifier "/" product-specifier "/" version-specifier "/"

. product-specifier changed from:
    organisation "/" project "/" version
    organisation "/" project

. organisation changed from:

. project changed from:

. version renamed to version-specifier, and is now opaque

. artifact-specifier is now opaque

Reply via email to