Vladimir Sitnikov created MSHARED-394: -----------------------------------------
Summary: 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 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)