Maven2 Repository Layout
Maven2 repository layout format is the default layout used since Maven 2 (see Repository Layout- Final in Maven 2.0 Design Documents), superceding old Maven 1 layout:
Repository root
|-- archetype-catalog.xml
`-- ${groupId as directory}/
|-- maven-metadata.xml
|-- .${checksums}
`-- ${artifactId}/
|-- maven-metadata.xml
|-- .${checksums}
`-- ${version}/
|-- ${artifactId}-${version}.pom
|-- .asc
|-- .${checksums}
|-- ${artifactId}-${version}.${extension}
|-- .asc
|-- .${checksums}
|-- ${artifactId}-${version}-${classifier}.${extension}
|-- .asc
`-- .${checksums}
where:
${groupId as directory}
is the groupId with.
replaced by/
, for exampleorg/apache/maven
,${artifactId}
is the artifactId,${version}
is the version, with some additional possibilities on a SNAPSHOT, see SNAPSHOT paragraph,${extension}
is the file extension, for examplezip
ortar.gz
,${classifier}
is the artifact classifier (when available),${checksums}
is a list of checksums algorithms,md5
andsha1
by default.
maven-metadata.xml
file format is defined in Maven Repository Metadata Model.
.asc
file is optional (may be required in some repositories, like Central Repository) and is a PGP detached signature file.
Obviously, ${groupId}
, ${artifactId}
and ${version}
are defined in pom.xml
. But what about ${classifier}
and ${extension}
, how are they defined?
Classifier and extension definition is completely different at artifact publication and usage times:
-
At artifact publication time: Extension and classifier are defined by plugins that create the artifacts and attach them for publication.
Some plugins provide configuration parameters to be able to override default values. For example, Maven JAR Plugin'sjar:jar
goal produces by default an artifact withjar
extension and empty classifier. Theclassifier
goal parameter can be used to define a classifier (there is no parameter to override extension). -
At artifact usage time: Extension and classifier are defined by
<dependency>
's<type>
and<classifier>
definition inpom.xml
:<type>
(jar
by default) defines the extension and default classifier:
see default artifact handlers to see default types and corresponding extension and default classifier.<classifier>
is optional, to override default classifier defined by the dependency type.
SNAPSHOT
In case of a SNAPSHOT version, version directory uses base version, i.e. version ending in -SNAPSHOT
, for example 3.8.4-SNAPSHOT
.
For artifact files, there are 2 options available:
- unique SNAPSHOT artifacts, using the same base version,
- multiple SNAPSHOT artifacts for one base version, each deployment will have an effective version where
SNAPSHOT
is replaced withYYYYMMDD.HHMMSS-${counter}
.
Protocol
Repository can be accessed through many file-oriented protocols, both for read and write: most classical are file://
, http://
and https://
(GET
and PUT
).
Older (now generally unused) protocols are FTP(S), SCP, SSH, …
HTTP/HTTPS protocol have 2 specific characteristics:
-
there is no directory listing feature: Maven does not need to list files in a directory, a remote directory does have not provide any directory listing feature,
-
HTTP/1.1 Reason-Phrase is used to provide extended message when artifact access is rejected by remote repository. This usage of Reason-Phrase is nowadays legacy and is removed in HTTP/2, MNG-6795 is open to create a replacement.
Archetype Catalog
archetype-catalog.xml
file at root directory is a catalog of all Maven Archetypes proposed in the repository.
Additional Content
Index
.index
directory at root directory is an index of the content, done by Maven Indexer.
If contains index files in 2 flavours:
- full index:
nexus-maven-repository-index.gz
- incremental index:
nexus-maven-repository-index.<n>.gz
+nexus-maven-repository-index.properties
Metadata
.meta
directory at root directory contains a few metadata files:
prefixes.txt
repository-metadata.xml