[
https://jira.codehaus.org/browse/MSHARED-394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=359191#comment-359191
]
Vladimir Sitnikov commented on MSHARED-394:
-------------------------------------------
Well, I thought Velocity is somewhere inside maven-filtering.
I did a double-check and it turns out the offending velocity is inside
maven-remote-resources-plugin.
I'll file a pull request there.
However, the improvement to properties filtering still makes sense.
For resource-based filtering, you'll have hard time "caching" input properties
for reader-based filtering.
It does not contain file name, thus you can't tell if the source was modified
or not.
> Avoid rewrite of destination in DefaultMavenFileFilter#filterFile when
> producing the same contents
> --------------------------------------------------------------------------------------------------
>
> Key: MSHARED-394
> URL: https://jira.codehaus.org/browse/MSHARED-394
> Project: Maven Shared Components
> Issue Type: Improvement
> Components: maven-filtering
> Affects Versions: maven-filtering-1.2
> Reporter: Vladimir Sitnikov
> Assignee: Kristian Rosenvold
>
> See relevant MRESOURCES-168.
> When processing "filtered" resources, maven-filtering always overwrites
> destination files, leading to rebuild of the upstream results (e.g. jar file
> being repackaged due to "DEBUG] isUp2date: false (Resource with newer
> modification date found.)").
> I think maven-filtering can do better job here: it can double-check if the
> resource contents after filtering is equal to the contents of the existing
> file, then it should avoid overwrite of the destination file.
> The change would be localized in
> {{org.apache.maven.shared.filtering.DefaultMavenFileFilter#filterFile}}:
> {code:java}
> private void filterFile(@Nonnull File from, @Nonnull File to, @Nullable
> String encoding, @Nullable List<FilterWrapper> wrappers) throws IOException,
> MavenFilteringException {
> if(wrappers != null && wrappers.size() > 0) {
> Reader fileReader = null;
> Writer fileWriter = null;
> try {
> fileReader = this.getFileReader(encoding, from);
> fileWriter = this.getFileWriter(encoding, to); // Here
> temporary buffer should be used to avoid accidental file overwrite
> Reader src = this.readerFilter.filter(fileReader, true,
> wrappers);
> IOUtil.copy(src, fileWriter);
> } finally {
> IOUtil.close(fileReader);
> IOUtil.close(fileWriter);
> }
> } else if(to.lastModified() < from.lastModified()) {
> FileUtils.copyFile(from, to);
> }
> }{code}
> The change would require to buffer the contents in memory, thus it might lead
> to OutOfMemory errors. I suggest disabling this buffering if the size of the
> source file exceeds some threshold.
--
This message was sent by Atlassian JIRA
(v6.1.6#6162)