From 7f39d04560080217701444fd7f46f4db120e0027 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Tue, 2 Dec 2014 16:27:25 +0300 Subject: [PATCH] IDEA-133754 Maven: resources builder: support outputDirectory parameters of maven-resources-plugin testResources/resources goals --- .../maven/compiler/MavenResourcesBuilder.java | 3 +- .../MavenModuleResourceConfiguration.java | 4 ++ ...esourceCompilerConfigurationGenerator.java | 19 +++++- .../maven/compiler/ResourceCopyingTest.java | 64 +++++++++++++++++++ 4 files changed, 88 insertions(+), 2 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 1df416dc0fe1..69184dd04fd6 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 @@ -98,7 +98,8 @@ public class MavenResourcesBuilder extends TargetBuilder resources = new ArrayList(); @@ -108,6 +111,7 @@ public class MavenModuleResourceConfiguration { result = 31 * result + filteringExclusions.hashCode(); result = 31 * result + (escapeString != null ? escapeString.hashCode() : 0); result = 31 * result + (outputDirectory != null ? outputDirectory.hashCode() : 0); + result = 31 * result + (testOutputDirectory != null ? testOutputDirectory.hashCode() : 0); result = 31 * result + (escapeWindowsPaths ? 1 : 0); result = 31 * result + (overwrite ? 1 : 0); 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 86f73e9721fa..a245114ad5e6 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 @@ -23,6 +23,7 @@ import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Document; import org.jdom.Element; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.dom.references.MavenFilteredPropertyPsiReferenceProvider; import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.model.MavenResource; @@ -124,7 +125,9 @@ public class MavenResourceCompilerConfigurationGenerator { } Element pluginConfiguration = mavenProject.getPluginConfiguration("org.apache.maven.plugins", "maven-resources-plugin"); - resourceConfig.outputDirectory = MavenJDOMUtil.findChildValueByPath(pluginConfiguration, "outputDirectory", null); + + resourceConfig.outputDirectory = getResourcesPluginGoalOutputDirectory(mavenProject, pluginConfiguration, "resources"); + resourceConfig.testOutputDirectory = getResourcesPluginGoalOutputDirectory(mavenProject, pluginConfiguration, "testResources"); addResources(resourceConfig.resources, mavenProject.getResources()); addResources(resourceConfig.testResources, mavenProject.getTestResources()); @@ -182,6 +185,20 @@ public class MavenResourceCompilerConfigurationGenerator { }); } + @Nullable + private static String getResourcesPluginGoalOutputDirectory(@NotNull MavenProject mavenProject, + @Nullable Element pluginConfiguration, + @NotNull String goal) { + final Element goalConfiguration = mavenProject.getPluginGoalConfiguration("org.apache.maven.plugins", "maven-resources-plugin", goal); + String outputDirectory = MavenJDOMUtil.findChildValueByPath(goalConfiguration, "outputDirectory", null); + if (outputDirectory == null) { + outputDirectory = MavenJDOMUtil.findChildValueByPath(pluginConfiguration, "outputDirectory", null); + } + return outputDirectory == null || FileUtil.isAbsolute(outputDirectory) + ? outputDirectory + : mavenProject.getDirectory() + '/' + outputDirectory; + } + private static void generateManifest(@NotNull MavenProject mavenProject, @NotNull Module module) { try { String jdkVersion = null; diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceCopyingTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceCopyingTest.java index 342c1b582d0e..1684caafd020 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceCopyingTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/compiler/ResourceCopyingTest.java @@ -122,6 +122,70 @@ public class ResourceCopyingTest extends MavenCompilingTestCase { assertCopied("target/resourceOutput/foo/dir/file.properties"); } + public void testResourcesPluginGoalAbsoluteCustomTargetPath() throws Exception { + createProjectSubFile("src/test/resources/dir/file.properties"); + + importProject("test" + + "project" + + "1" + + + "" + + " " + + " " + + " maven-resources-plugin" + + " 2.6" + + " " + + " " + + " default-testResources" + + " process-test-resources" + + " " + + " testResources" + + " " + + " " + + " ${project.build.testOutputDirectory}/custom" + + " " + + " " + + " " + + " " + + " " + + ""); + + compileModules("project"); + assertCopied("target/test-classes/custom/dir/file.properties"); + } + + public void testResourcesPluginGoalRelativeCustomTargetPath() throws Exception { + createProjectSubFile("src/test/resources/dir/file.properties"); + + importProject("test" + + "project" + + "1" + + + "" + + " " + + " " + + " maven-resources-plugin" + + " 2.6" + + " " + + " " + + " default-testResources" + + " process-test-resources" + + " " + + " testResources" + + " " + + " " + + " target/test-classes/custom" + + " " + + " " + + " " + + " " + + " " + + ""); + + compileModules("project"); + assertCopied("target/test-classes/custom/dir/file.properties"); + } + public void testAbsoluteCustomTargetPath() throws Exception { createProjectSubFile("res/foo/file.properties");