2009-11-20 00:07:04 -05:00
|
|
|
The following is the intended content model for the metadata content repository:
|
|
|
|
|
|
|
|
.
|
|
|
|
`-- repositories/
|
|
|
|
`-- central/
|
|
|
|
|-- config/
|
|
|
|
| |-- name=
|
|
|
|
| |-- storageUrl=
|
|
|
|
| `-- uri=
|
|
|
|
|-- content/
|
|
|
|
| `-- org/
|
|
|
|
| `-- apache/
|
|
|
|
| `-- archiva/
|
2009-12-01 23:45:50 -05:00
|
|
|
| `-- platform/
|
|
|
|
| |-- scanner/
|
|
|
|
| | |-- 1.0-SNAPSHOT/
|
|
|
|
| | | |-- scanner-1.0-20091120.012345-1.pom/
|
|
|
|
| | | | |-- asc=
|
|
|
|
| | | | |-- created=
|
|
|
|
| | | | |-- maven:buildNumber=
|
|
|
|
| | | | |-- maven:classifier=
|
|
|
|
| | | | |-- maven:timestamp=
|
|
|
|
| | | | |-- maven:type=
|
|
|
|
| | | | |-- md5=
|
|
|
|
| | | | |-- sha1=
|
|
|
|
| | | | |-- size=
|
|
|
|
| | | | |-- updated=
|
|
|
|
| | | | `-- version=
|
|
|
|
| | | |-- ciManagement.system=
|
|
|
|
| | | |-- ciManagement.url=
|
|
|
|
| | | |-- created=
|
|
|
|
| | | |-- dependencies.0.artifactId=
|
|
|
|
| | | |-- dependencies.0.classifier=
|
|
|
|
| | | |-- dependencies.0.groupId=
|
|
|
|
| | | |-- dependencies.0.optional=
|
|
|
|
| | | |-- dependencies.0.scope=
|
|
|
|
| | | |-- dependencies.0.systemPath=
|
|
|
|
| | | |-- dependencies.0.type=
|
|
|
|
| | | |-- dependencies.0.version=
|
|
|
|
| | | |-- description=
|
|
|
|
| | | |-- individuals.0.email=
|
|
|
|
| | | |-- individuals.0.name=
|
|
|
|
| | | |-- individuals.0.properties.scmId=
|
|
|
|
| | | |-- individuals.0.roles.0=
|
|
|
|
| | | |-- individuals.0.timezone=
|
|
|
|
| | | |-- issueManagement.system=
|
|
|
|
| | | |-- issueManagement.url=
|
|
|
|
| | | |-- licenses.0.name=
|
|
|
|
| | | |-- licenses.0.url=
|
|
|
|
| | | |-- mailingLists.0.mainArchiveUrl=
|
|
|
|
| | | |-- mailingLists.0.name=
|
|
|
|
| | | |-- mailingLists.0.otherArchives.0=
|
|
|
|
| | | |-- mailingLists.0.postAddress=
|
|
|
|
| | | |-- mailingLists.0.subscribeAddress=
|
|
|
|
| | | |-- mailingLists.0.unsubscribeAddress=
|
|
|
|
| | | |-- maven:buildExtensions.0.artifactId=
|
|
|
|
| | | |-- maven:buildExtensions.0.groupId=
|
|
|
|
| | | |-- maven:buildExtensions.0.version=
|
|
|
|
| | | |-- maven:packaging=
|
|
|
|
| | | |-- maven:parent.artifactId=
|
|
|
|
| | | |-- maven:parent.groupId=
|
|
|
|
| | | |-- maven:parent.version=
|
|
|
|
| | | |-- maven:plugins.0.artifactId=
|
|
|
|
| | | |-- maven:plugins.0.groupId=
|
|
|
|
| | | |-- maven:plugins.0.reporting=
|
|
|
|
| | | |-- maven:plugins.0.version=
|
|
|
|
| | | |-- maven:properties.mavenVersion=
|
|
|
|
| | | |-- maven:repositories.0.id=
|
|
|
|
| | | |-- maven:repositories.0.layout=
|
|
|
|
| | | |-- maven:repositories.0.name=
|
|
|
|
| | | |-- maven:repositories.0.plugins=
|
|
|
|
| | | |-- maven:repositories.0.releases=
|
|
|
|
| | | |-- maven:repositories.0.snapshots=
|
|
|
|
| | | |-- maven:repositories.0.url=
|
|
|
|
| | | |-- name=
|
|
|
|
| | | |-- organization.favicon=
|
|
|
|
| | | |-- organization.logo=
|
|
|
|
| | | |-- organization.name=
|
|
|
|
| | | |-- organization.url=
|
|
|
|
| | | |-- relocatedTo.namespace=
|
|
|
|
| | | |-- relocatedTo.project=
|
|
|
|
| | | |-- relocatedTo.projectVersion=
|
|
|
|
| | | |-- scm.connection=
|
|
|
|
| | | |-- scm.developerConnection=
|
|
|
|
| | | |-- scm.url=
|
|
|
|
| | | |-- updated=
|
|
|
|
| | | `-- url=
|
|
|
|
| | `-- maven:artifactId=
|
|
|
|
| `-- maven:groupId=
|
2009-11-20 00:07:04 -05:00
|
|
|
`-- metadata/
|
|
|
|
|
|
|
|
(To update - run "tree --dirstfirst -F" on the unpacked content-model.zip from the sandbox)
|
|
|
|
|
|
|
|
Notes:
|
|
|
|
|
2009-12-01 23:45:50 -05:00
|
|
|
*) In the above example, we have the following coordinates:
|
|
|
|
- namespace = org.apache.archiva.platform (namespaces are of arbitrary depth, and are project namespaces, not to be
|
|
|
|
confused with JCR's item/node namespaces)
|
|
|
|
- project = scanner
|
|
|
|
- version = 1.0-SNAPSHOT
|
|
|
|
- artifact = scanner-1.0-20091120.012345-1.pom
|
2009-11-20 00:07:04 -05:00
|
|
|
|
2009-12-01 23:45:50 -05:00
|
|
|
*) filename (scanner-1.0-20091120.012345-1.pom) is a node, and each is distinct except for checksums, etc.
|
2009-11-20 00:07:04 -05:00
|
|
|
|
2009-12-01 23:45:50 -05:00
|
|
|
*) the top level version (1.0-SNAPSHOT) is the version best used to describe the project (the "marketed version"). It
|
|
|
|
must still be unique for lookup and comparing project versions to each other, but can contain several different
|
|
|
|
"build" artifacts.
|
2009-11-20 00:07:04 -05:00
|
|
|
|
2009-12-01 23:45:50 -05:00
|
|
|
*) Projects are just a single code project. They do not have subprojects - if such modeling needs to be done, then we
|
|
|
|
can create a products tree that will map what "Archiva 1.0" contains from the other repositories.
|
2009-11-24 01:26:04 -05:00
|
|
|
|
2009-12-01 23:45:50 -05:00
|
|
|
*) There is not Maven-native information here, other than that in the maven: namespace. pom & other files are not
|
|
|
|
treated as special - they are each stored and it is up to the reader to interpret
|
|
|
|
|
|
|
|
*) artifact data is not stored in the metadata repository (there is no data= property on the file). The information here
|
|
|
|
is enough to locate the file in the original storageUrl when it is requested
|
|
|
|
|
|
|
|
*) The API will still use separate namespace and project identifiers (the namespace can be null if there isn't one).
|
|
|
|
This is chosen to allow splitting the namespace on '.', and also allowing '.' in the project identifier without
|
|
|
|
splitting
|
|
|
|
|
|
|
|
*) properties with '.' may be nested in other representations such as Java models or XML, if appropriate
|
|
|
|
|
|
|
|
*) we only keep one set of project information for a "version" - this differs from Maven's storage of one POM per
|
|
|
|
snapshot. The Maven 2 module will take the latest. Those that need Maven's behaviour should retrieve the POM
|
|
|
|
directly. Implementations are also free to store as much information as desired within the artifact node in addition
|
|
|
|
to whatever is shared in the project version node.
|
|
|
|
|
|
|
|
*) while some information is stored at the most generic level in the metadata repository (eg maven:groupId,
|
|
|
|
maven:artifactId), for convenience when loaded by the implementation it may all be pushed into the projectVersion's
|
|
|
|
information. The metadata repository implementation can decide how best to store and retrieve the information.
|
|
|
|
|
|
|
|
*) created/updated timestamps may be maintained by the metadata repository implementation
|
|
|
|
|
|
|
|
*) references are stored outside the main model so that their creation doesn't imply a "stub" model - we know if the
|
|
|
|
project exists whether a reference is created or not. References need not infer referential integrity
|
|
|
|
|
|
|
|
*) some of the above needs to be reviewed before going into production. For example:
|
|
|
|
- the maven specific aspects of dependencies should become a faceted part of the content
|
|
|
|
- more of the metadata might be faceted in general, keeping the content model basic by default
|
|
|
|
- the storing of metadata as 0-indexed lists would be better in as child nodes. This might require additional levels
|
|
|
|
in the current repository (.../scanner/versions/1.0-SNAPSHOT/artifacts/scanner-1.0-20091120.012345-1.pom), or
|
|
|
|
for listed information to be in a separate tree
|
|
|
|
(/metadata/org/apache/archiva/platform/scanner/1.0-SNAPSHOT/mailingLists/users), or to use some 'reserved names'
|
|
|
|
for nodes (by using a content repository's namespacing capabilities). The first has the advantage of
|
|
|
|
keeping information together but a longer path name and less familiarity to Maven users. The second arbitrarily
|
|
|
|
divides metadata. The third option seems preferable but needs more investigation at this stage.
|
|
|
|
|
|
|
|
*) Future possibilities:
|
|
|
|
- audit metadata on artifacts (who uploaded, when, and how), or whether it was discovered by scanning
|
2009-11-24 22:11:22 -05:00
|
|
|
|