[ 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)