From e2eaf0d6608639c252c91dbb2ea2d87f244cb58c Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Tue, 11 Mar 2014 19:37:11 +0400 Subject: [PATCH] Support 'overwrite' parameter for maven-resources-plugin. --- .../maven/compiler/MavenResourcesBuilder.java | 20 +++-- .../MavenModuleResourceConfiguration.java | 4 + .../impl/MavenResourceRootDescriptor.java | 11 ++- .../model/impl/MavenResourcesTarget.java | 8 +- ...esourceCompilerConfigurationGenerator.java | 5 ++ .../maven/compiler/ResourceFilteringTest.java | 73 +++++++++++++++++++ 6 files changed, 111 insertions(+), 10 deletions(-) diff --git a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/compiler/MavenResourcesBuilder.java b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/compiler/MavenResourcesBuilder.java index 5ff7b8c0757a..4c7ef2c1590f 100644 --- a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/compiler/MavenResourcesBuilder.java +++ b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/compiler/MavenResourcesBuilder.java @@ -64,16 +64,22 @@ public class MavenResourcesBuilder extends TargetBuilder() { @Override public int compare(MavenResourceRootDescriptor r1, MavenResourceRootDescriptor r2) { - if (r1.getConfiguration().isFiltered) { - if (!r2.getConfiguration().isFiltered) return 1; + int res = r1.getIndexInPom() - r2.getIndexInPom(); - return r1.getIndexInPom() - r2.getIndexInPom(); - } - else { - if (r2.getConfiguration().isFiltered) return -1; + if (r1.isOverwrite()) { + assert r2.isOverwrite(); // 'overwrite' parameters is common for all roots in module. - return r2.getIndexInPom() - r1.getIndexInPom(); + return res; } + + if (r1.getConfiguration().isFiltered && !r2.getConfiguration().isFiltered) return 1; + if (!r1.getConfiguration().isFiltered && r2.getConfiguration().isFiltered) return -1; + + if (!r1.getConfiguration().isFiltered) { + res = -res; + } + + return res; } }); diff --git a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenModuleResourceConfiguration.java b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenModuleResourceConfiguration.java index 62f8922e03d5..29abf37a8be5 100644 --- a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenModuleResourceConfiguration.java +++ b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenModuleResourceConfiguration.java @@ -63,6 +63,9 @@ public class MavenModuleResourceConfiguration { @OptionTag public boolean escapeWindowsPaths = true; + @OptionTag + public boolean overwrite; + @Tag("resources") @AbstractCollection(surroundWithTag = false, elementTag = "resource") public List resources = new ArrayList(); @@ -102,6 +105,7 @@ public class MavenModuleResourceConfiguration { result = 31 * result + filteringExclusions.hashCode(); result = 31 * result + (escapeString != null ? escapeString.hashCode() : 0); result = 31 * result + (escapeWindowsPaths ? 1 : 0); + result = 31 * result + (overwrite ? 1 : 0); return result; } } diff --git a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourceRootDescriptor.java b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourceRootDescriptor.java index 0cc6aa58e448..1def0bc0a73c 100644 --- a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourceRootDescriptor.java +++ b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourceRootDescriptor.java @@ -31,16 +31,21 @@ public class MavenResourceRootDescriptor extends BuildRootDescriptor { private final ResourceRootConfiguration myConfig; private final File myFile; private final String myId; + private final boolean myOverwrite; private final int myIndexInPom; - public MavenResourceRootDescriptor(@NotNull MavenResourcesTarget target, ResourceRootConfiguration config, int indexInPom) { + public MavenResourceRootDescriptor(@NotNull MavenResourcesTarget target, + ResourceRootConfiguration config, + int indexInPom, + boolean overwrite) { myTarget = target; myConfig = config; final String path = FileUtil.toCanonicalPath(config.directory); myFile = new File(path); myId = path; myIndexInPom = indexInPom; + myOverwrite = overwrite; } public ResourceRootConfiguration getConfiguration() { @@ -76,4 +81,8 @@ public class MavenResourceRootDescriptor extends BuildRootDescriptor { public int getIndexInPom() { return myIndexInPom; } + + public boolean isOverwrite() { + return myOverwrite; + } } diff --git a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java index 03d4e62744ed..bf89e9696af7 100644 --- a/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java +++ b/plugins/maven/jps-plugin/src/org/jetbrains/jps/maven/model/impl/MavenResourcesTarget.java @@ -66,10 +66,14 @@ public class MavenResourcesTarget extends ModuleBasedTarget result = new ArrayList(); + MavenProjectConfiguration projectConfig = JpsMavenExtensionService.getInstance().getMavenProjectConfiguration(dataPaths); + MavenModuleResourceConfiguration moduleConfig = projectConfig.moduleConfigurations.get(myModule.getName()); + if (moduleConfig == null) return Collections.emptyList(); + int i = 0; - for (ResourceRootConfiguration resource : getRootConfigurations(dataPaths)) { - result.add(new MavenResourceRootDescriptor(this, resource, i++)); + for (ResourceRootConfiguration resource : getRootConfigurations(moduleConfig)) { + result.add(new MavenResourceRootDescriptor(this, resource, i++, moduleConfig.overwrite)); } return result; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java index 600c9f51df45..4dc7a21f7a81 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenResourceCompilerConfigurationGenerator.java @@ -135,6 +135,11 @@ public class MavenResourceCompilerConfigurationGenerator { resourceConfig.escapeWindowsPaths = Boolean.parseBoolean(escapeWindowsPaths); } + String overwrite = MavenJDOMUtil.findChildValueByPath(pluginConfiguration, "overwrite"); + if (overwrite != null) { + resourceConfig.overwrite = Boolean.parseBoolean(overwrite); + } + projectConfig.moduleConfigurations.put(module.getName(), resourceConfig); } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java index 1f1d2304ffeb..4518c4adccc9 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceFilteringTest.java @@ -1107,4 +1107,77 @@ public abstract class ResourceFilteringTest extends MavenCompilingTestCase { assertResult("target/classes/a.txt", "2"); // For the filtered files last file override other files. } + public void testOverwriteParameter1() throws Exception { + if (!useJps()) return; + + createProjectSubFile("resources1/a.txt", "1"); + createProjectSubFile("resources2/a.txt", "2"); + + importProject("test" + + "project" + + "1" + + "" + + + "" + + " " + + " " + + " resources1" + + " " + + " " + + " resources2" + + " " + + " " + + "" + + " " + + " " + + " maven-resources-plugin" + + " " + + " true" + + " " + + " " + + " " + + ""); + + compileModules("project"); + + assertResult("target/classes/a.txt", "2"); + } + + public void testOverwriteParameter2() throws Exception { + if (!useJps()) return; + + createProjectSubFile("resources1/a.txt", "1"); + createProjectSubFile("resources2/a.txt", "2"); + + importProject("test" + + "project" + + "1" + + "" + + + "" + + " " + + " " + + " resources1" + + " true" + + " " + + " " + + " resources2" + + " " + + " " + + "" + + " " + + " " + + " maven-resources-plugin" + + " " + + " true" + + " " + + " " + + " " + + ""); + + compileModules("project"); + + assertResult("target/classes/a.txt", "2"); + } + }