blob: af6c851dbed069f1a09aaacfb803901cec8b9de3 [file] [log] [blame]
------
Introduction
------
Benson Margulies
------
2013-07-22
------
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
${project.name}
The maven-scm-publish-plugin is a utility plugin to allow publishing Maven
website to any supported SCM.
The primary goal was to have an utility plugin to allow Apache projects
to publish Maven websites via the ASF svnpubsub system
In addition to SCM operations, it takes care to fix newline inconsistencies
generated by <<<maven-site-plugin>>> (see {{{https://jira.codehaus.org/browse/MSITE-121}MSITE-121}}),
which prevents simple content import to SCM.
The plugin has been tested with git scm too and by example can push content for github pages too.
* Implementation
The plugin works from staged website by default (see {{{./publish-scm-mojo.html#content}<<<content>>> parameter}}).
It first checks out the contents of a directory from
the SCM (see {{{./publish-scm-mojo.html#pubScmUrl}<<<pubSubUrl>>> parameter}}) into
<<<target/scmpublish-checkout>>> by default (see {{{./publish-scm-mojo.html#checkoutDirectory}<<<checkoutDirectory>>> parameter}}).
Then locally staged content is applied to the check-out, issuing
appropriate SCM commands to add and delete entries, followed by a
checkin.
The <<scmpublish.dryRun>> parameter to the plugin avoids all
SCM operations, and simply logs out the added, deleted,
and changed files.
The <<scmpublish.skipCheckin>> parameter omits the final checkin.
This allows you to visit <<<target/scmpublish-checkout>>>, and validate
its contents before submitting to the SCM.
* Publishing any content to SCM
Even without any pom.xml/Maven project, you can update SCM content with
a local content:
+-------+
mvn scm-publish:publish-scm -Dscmpublish.pubScmUrl=scm:... -Dscmpublish.content=...path-to-content...
+-------+
SCM content will be checked-out to a temporary directory, then local content will
be applied to the check-out, before it is checked-in back.
See {{{./examples/importing-maven-site.html}maven.apache.org content import script}} for an
example.
<<See {{{./various-tips.html}Some Tips}}.>>
* Known Limitations
There are 2 known limitations:
* For svn the plugin can create the initial SCM directory if it does not exist. But for git by example if you use a branch,
the branch won't be created, you have to create it manually.
* the plugin works well for multi-module websites publishing to a complete directory:
you just need to publish <<<mvn site:stage>>> content. But if one module does not publish
its content to the same directory (like Surefire or Enforcer, which have a
base directory and one plugin in <<</plugins/>>>), this staging area can't be simply imported.
[]
* Future Dreams
Ideally, scm urls would be supported in <<<\<distributionManagement>>>> section of the POM, then
publishing would simply be <<<mvn site-deploy>>>, without any problems for non-flat multi-modules
sites.
To reach such a dream, there are some steps:
* fix inconsistent newlines generated by <<<maven-site-plugin>>> (caused by site.vm template and
resources taken from skin jar without fixing newlines): {{{https://jira.codehaus.org/browse/MSITE-121}MSITE-121}}
is fixed in (future) maven-site-plugin 3.4,
* improve {{{/wagon/wagon-providers/wagon-scm/}<<<wagon-scm>>>}} to put a whole directory content
in one commit, and not with one commit per file.
[]
Then this plugin will be outdated, replaced by natural <<<maven-site-plugin:deploy>>> goal.