= Archiva Components
:toc:

== Licensing information

Archiva Compontents is developed under the Apache License Version 2.0

== About Archiva Components

This is project contains multiple (mostly independent) modules used by different projects related
to Apache Archiva. 

The components are:

* expression-evaluator
* graph
* spring-apacheds
* spring-cache
* spring-registry
* spring-taskqueue


== Development

To get involved in Archiva development, contact dev@archiva.apache.org.

Users with questions may mail to users@archiva.apache.org.


== How to build and publish the pages for the archiva web content

This module and the children contain web content and project reports that can be published to the
archiva web site: https://archiva.apache.org

The web content parts of this module and submodules are published to the path

  /components/

=== Use the script

There is a shell script +deploySite.sh+ which you can run to generate the site check and publish to
the remote repository. It works only on Linux, on other platforms you have to go the next section.

The script is interactive, it asks you to confirm the publish after generation of the staging part.

.Execute
  ./deploySite.sh

All arguments are appended to the mvn calls.

=== Run the mvn steps manually

==== Building the pages

You need enough free disk space to publish the web content. The archiva web site repository is big,
but the maven build will only checkout the necessary directories for this build (sparse checkout).

For all the commands you have to change to this site directory:

.The following creates the site to the staging folder
  mvn clean site
  mvn site:stage

The result can be checked in

  target/staging/components/

with your browser.

If you would like the use a local checkout of the archiva-web-content.git repository and not push directly
to the remote repository, you may add this parameter:

  -DsiteRepositoryUrl=scm:git:file:///${path-to-your-local-archiva}/archiva-web-content.git

where +${path-to-your-local-archiva}+ is the path where a bare clone of the archiva-web-content.git is stored.

NOTE: You cannot use +mvn site:run+ because this will place the submodules into the same folder and
overwrite each other.

==== Publish the pages

.This command publishes to the git repository
  mvn scm-publish:publish-scm

After publishing to the git repository the gitpubsub mechanism is transferring it to the HTTP server.

If you would like the use a local checkout of the archiva-web-content.git repository and not push directly
to the remote repository, you may add this parameter:

  -DsiteRepositoryUrl=scm:git:file:///${path-to-your-local-archiva}/archiva-web-content.git

=== Some notes about the build process

A sparse checkout of the git repository will be created in

 .site-content

but only, if the directory +.site-content/.git+ does not exist. 


