Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Page properties


Status
 
Status
titleDRAFT
Version
Issue(s)
Sources
Developer(s)


Status

This RFC is currently in the DRAFT state. Nothing in this RFC has been agreed or confirmed.

...

Table of Contents

Introduction


Excerpt

The remote repository layout defines how the central repositories used by Apache Maven as well as a non-trivial number of third party clients can access the artifacts produced as versioned releases of dependent projects.

 


Overview

 


Projects

The basic unit of organisation in a repository is the project coordinates. The project coordinates consist of the pair groupId:artifactId.

...

  • Consumers must ignore unknown keys
  • Producers must preserve unknown keys
  • Aggregating proxies must merge all keys, where conflicts arise, the aggregating proxy will use a priority list of upstream sources to determine which value will win

The basic format will be something like:

Code Block
json
languagejsonjs
{
  "modified":"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", // always ISO 8601 extended format in UTC timezone{
  "group":[ // present if there are any artifacts deployed using the repo path as groupId
    "artifactId",
    "artifactId:platformId",
    "artifactId",
    "artifactId:platformId",
    "artifactId:platformId"
  ],
  "artifact":[ // present if there are any artifacts deployed using the repo path as groupId:artifactId[:platformId]
    "version",
    "version",
    "version",
    "version"
  ],
  "org.apache.maven:plugins":[ // this is a Maven specific key, hence namespaced
    {
      "name":"...",
      "artifactId":"...",
      "prefix":"..."
    },
    {
      "name":"...",
      "artifactId":"...",
      "prefix":"..."
    }
  ]
}

...

https://repo.maven.apache.org/maven2/io/github/stephenc/maven/repo-metadata.json would be:

Code Block
languagejs
{
  "modified":"2014-01-16T09:55:43.511Z",
  "group":[
    "rfmm-maven-plugin"
  ],
  "org.apache.maven:plugins":[
    {
      "name": "Release From My Machine Maven Plugin"
      "prefix": "rfmm"
      "artifactId": "rfmm-maven-plugin"
    }
  ]
}

https://repo.maven.apache.org/maven2/io/github/stephenc/maven/rfmm-maven-plugin/repo-metadata.json would be:

Code Block
js
js
{
  "modified":"2014-01-16T09:55:49.243Z",
  "artifact":[
    "1.0"
  ]
}


TODO consider a counter-proposal... the top level keys are the repository "id" and then everything else is as before. This simplifies aggregating proxies and may assist with PDT Repositories as we would then know the IDs of the content from aggregating proxies, e.g.

https://repo.maven.apache.org/maven2/io/github/stephenc/maven/repo-metadata.json would be:

Code Block
languagejs
{
  "central":{
    "modified":"2014-01-16T09:55:43.511Z",
    "group":[
      "rfmm-maven-plugin"
    ],
    "org.apache.maven:plugins":[
      {
        "name": "Release From My Machine Maven Plugin"
        "prefix": "rfmm"
        "artifactId": "rfmm-maven-plugin"
      }
    ]
  }
}

https://repo.maven.apache.org/maven2/io/github/stephenc/maven/rfmm-maven-plugin/repo-metadata.json would be:

Code Block
js
js
{
  "central":{
    "modified":"2014-01-16T09:55:49.243Z",
    "artifact":[
      "1.0"
    ]
  }
}