Andrius Velykis created MSITE-702:
-------------------------------------
Summary: Overriding skin resources / Duplicate copying of skin
resources
Key: MSITE-702
URL: https://jira.codehaus.org/browse/MSITE-702
Project: Maven Site Plugin
Issue Type: Bug
Affects Versions: 3.3
Reporter: Andrius Velykis
Attachments: site-resources-test.zip
I am trying to override some resources in a Maven site skin by placing files
with the same name into my /src/site/resources/ directory. For example, if I
were to use the default skin and want to override some file (say
css/maven-theme.css), I would create a file
/src/site/resources/css/maven-theme.css in my Maven project and generate site
with {{mvn site}}. However, in the generated site, the maven-theme.css file
from the skin JAR is used rather than my overriding copy.
I was wondering whether this is actually allowed by design in Maven site. I
investigated the code and saw some interesting cases there regarding this issue.
In
[{{SiteMojo#renderLocale()}}|http://maven.apache.org/plugins/maven-site-plugin/xref/org/apache/maven/plugins/site/SiteMojo.html#151],
the site is rendered twice: first with normal resource directories and then
with {{generated-site}}. During each rendering ({{siteRenderer.render()}}), all
skin resources are copied to the target directory: see
[{{DefaultSiteRenderer#copyResources()}}|http://maven.apache.org/doxia/doxia-sitetools/doxia-site-renderer/xref/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.html#728].
After copying the skin resources, the extra site resources from the
{{src/site/resources}} directory are copied, overwriting the skin resources.
So in general, the code seems to allow overriding the skin resources with the
ones in src/site/resources. However, the double-rendering of the site results
in the following steps regarding the overridden file:
1. maven-theme.css is copied to /target from the skin JAR (normal rendering)
2. maven-theme.css is overridden from the src/site/resources (normal rendering)
<- I want this!
3. maven-theme.css is AGAIN copied to /target from the skin JAR (generated-site
rendering)
4. resources from target/generated-site/resources are copied to /target/site,
however maven-theme.css is not there. (generated-site rendering)
Therefore the 3rd step reverts my override. I could still achieve what I want
by having a build step that copies everything from src/site/resources to
target/generated-site/resources, which would ensure that my file is the last
one copied, but it would be an unnecessary workaround..
I am thinking that skin files only need to be copied once during the generation
process. This would allow overriding files nicely. The second rendering
([{{SiteMojo:191}}|http://maven.apache.org/plugins/maven-site-plugin/xref/org/apache/maven/plugins/site/SiteMojo.html#191])
of the {{generated-site}} sources should not repeat the original process.
Would this be doable? By overriding resource files, it would be possible, for
example, to adjust images in the skin without creating and maintaining a new
skin. In my case ([Reflow Maven
skin|http://andriusvelykis.github.io/reflow-maven-skin/]), I want to allow
overriding the Twitter Bootstrap files. I would package the default
{{bootstrap.min.css}} with the skin, but the users would be able to override
the file with their own configuration. The [Bootstrap
customization|http://getbootstrap.com/customize/] or various available themes
produce a full bootstrap.min.css file, where it is easier to replace the
package skin's version rather than using site.css. site.css could have
site-specific customisations, while the theme would be placed in
bootstrap.min.css.
I have attached a small Maven site project. I have added
src/site/resources/css/maven-theme.css to the resources but in the generated
site, the skin's maven-theme.css is still used.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira