IDEA-120054: Maven: war: non-filtered resource is not copied to output

This commit is contained in:
nik
2014-02-19 15:52:00 +04:00
parent 99ca505a07
commit a94a51ec20
4 changed files with 21 additions and 10 deletions
@@ -30,10 +30,7 @@ import org.jetbrains.jps.model.JpsEncodingConfigurationService;
import org.jetbrains.jps.model.JpsEncodingProjectConfiguration;
import org.jetbrains.jps.model.JpsProject;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
@@ -66,8 +63,10 @@ public class MavenResourceFileProcessor {
myFilteringExcludedExtensions = moduleConfiguration.getFilteringExcludedExtensions();
}
protected void copyFile(File file, File targetFile, ResourceRootConfiguration rootConfiguration, CompileContext context) throws IOException {
boolean shouldFilter = rootConfiguration.isFiltered && !myFilteringExcludedExtensions.contains(FileUtilRt.getExtension(file.getName()));
public void copyFile(File file, File targetFile, ResourceRootConfiguration rootConfiguration, CompileContext context,
FileFilter filteringFilter) throws IOException {
boolean shouldFilter = rootConfiguration.isFiltered && !myFilteringExcludedExtensions.contains(FileUtilRt.getExtension(file.getName()))
&& filteringFilter.accept(file);
if (shouldFilter && file.length() > FILTERING_SIZE_LIMIT) {
context.processMessage(new CompilerMessage("MavenResources", BuildMessage.Kind.WARNING,
"File is too big to be filtered. Most likely it is a binary file and should be excluded from filtering",
@@ -1,6 +1,7 @@
package org.jetbrains.jps.maven.compiler;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.builders.BuildOutputConsumer;
import org.jetbrains.jps.builders.DirtyFilesHolder;
@@ -59,7 +60,7 @@ public class MavenResourcesBuilder extends TargetBuilder<MavenResourceRootDescri
try {
context.processMessage(new ProgressMessage("Copying resources... [" + target.getModule().getName() + "]"));
fileProcessor.copyFile(file, outputFile, rd.getConfiguration(), context);
fileProcessor.copyFile(file, outputFile, rd.getConfiguration(), context, FileUtilRt.ALL_FILES);
outputConsumer.registerOutputFile(outputFile, Collections.singleton(sourcePath));
}
catch (UnsupportedEncodingException e) {
@@ -16,6 +16,9 @@
package org.jetbrains.jps.maven.compiler;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.util.text.StringUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.builders.storage.BuildDataPaths;
@@ -66,6 +69,8 @@ public class MavenWebArtifactRootCopyingHandlerProvider extends ArtifactRootCopy
@NotNull private final ResourceRootConfiguration myRootConfiguration;
@NotNull private final MavenModuleResourceConfiguration myModuleResourceConfiguration;
@NotNull private final File myRoot;
private FileFilter myFileFilter;
private boolean myMainWebAppRoot;
private MavenWebRootCopyingHandler(@NotNull MavenResourceFileProcessor fileProcessor,
@NotNull ResourceRootConfiguration rootConfiguration,
@@ -75,11 +80,17 @@ public class MavenWebArtifactRootCopyingHandlerProvider extends ArtifactRootCopy
myRootConfiguration = rootConfiguration;
myModuleResourceConfiguration = moduleResourceConfiguration;
myRoot = root;
myFileFilter = new MavenResourceFileFilter(myRoot, myRootConfiguration);
//for additional resource directory 'exclude' means 'exclude from copying' but for the default webapp resource it mean 'exclude from filtering'
String relativePath = FileUtil.getRelativePath(FileUtil.toSystemIndependentName(moduleResourceConfiguration.directory),
FileUtil.toSystemIndependentName(rootConfiguration.directory), '/');
myMainWebAppRoot = relativePath != null && "src/main/webapp".equals(StringUtil.trimEnd(relativePath, "/"));
}
@Override
public void copyFile(@NotNull File from, @NotNull File to, @NotNull CompileContext context) throws IOException {
myFileProcessor.copyFile(from, to, myRootConfiguration, context);
myFileProcessor.copyFile(from, to, myRootConfiguration, context, myMainWebAppRoot ? myFileFilter : FileUtilRt.ALL_FILES);
}
@Override
@@ -91,7 +102,7 @@ public class MavenWebArtifactRootCopyingHandlerProvider extends ArtifactRootCopy
@NotNull
@Override
public FileFilter createFileFilter() {
return new MavenResourceFileFilter(myRoot, myRootConfiguration);
return myMainWebAppRoot ? FileUtilRt.ALL_FILES : myFileFilter;
}
}
}
@@ -44,7 +44,7 @@ public class MavenResourceFileFilter implements FileFilter {
return relPath != null && isIncluded(relPath);
}
public boolean isIncluded(String relativePath) {
private boolean isIncluded(String relativePath) {
if (myNormalizedIncludes == null) {
if (myConfiguration.includes.isEmpty()) {
myNormalizedIncludes = new String[]{"**" + File.separatorChar + '*'};