Currently, the character encoding for source files needs to be configured individually for each and every plugin that processes source files.
Life would become easier if there was a dedicated POM element like ${project.build.sourceEncoding} which could be used to specify the encoding once per entire project. Every plugin could use it as default value:
Adding this element to the POM structure can only happen in Maven 2.1. For Maven 2.0.x, the value can be defined as a property, thus plugins could immediately use ${project.build.sourceEncoding} expression, whatever Maven version is used.
Default Value
Without default value for source encoding, platform encoding is used, which is bad for build reproducibility. Then setting a default value consistently across every Maven plugin will improve build reproducibility.
Proposed default value: ISO-8859-1, which must be supported by every JVM (see java.nio.Charset) and is already the default value for some plugins (the majority of plugins use platform encoding as a default value instead).
Note: Using a fixed default value for the encoding instead of the platform encoding can potentially break builds that rely on a platform encoding other than the proposed Latin-1 but did not lock this down in the POM. It is assumed that those builds:
- are neglectable in number
- are easy to fix by setting the new property
As such the general benefit of out-of-the-box reproducibility outweighs.
This default value can be coded in POM model for 2.1.x
and in super-pom in Maven 2.0.x:
A check has to be coded in every plugin too, in case Maven version used at runtime does not contain the default value:
Plugins to Modify
Affected Apache plugins:
- maven-changes-plugin (velocity template processing)
- maven-compiler-plugin (source processing): MCOMPILER-70
- maven-invoker-plugin (beanshell script evaluation): MINVOKER-30
- maven-javadoc-plugin (source processing): MJAVADOC-182
- maven-jxr-plugin (source processing): JXR-60
- maven-plugin-plugin (javadoc extraction, java source generation): MPLUGIN-101, MPLUGIN-100
- maven-pmd-plugin (source analysis): MPMD-76
- maven-resources-plugin (contents filtering): MRESOURCES-57
Affected Codehaus plugins:
- modello-maven-plugin/modello-core (java source generation)
- plexus-maven-plugin (javadoc extraction)
- shitty-maven-plugin (groovy script evaluation)
- taglist-maven-plugin (javadoc extraction)
References
Please see [0] for the related thread from the mailing list, and [1] for some further descriptions.
[0] http://www.nabble.com/POM-Element-for-Source-File-Encoding-to14930345s177.html
[1] http://www.nabble.com/Re%3A-Maven-and-File-Encoding-p16301958s177.html
