diff --git a/maven-archetype-plugin/src/it/projects/ARCHETYPE-622_main_build_settings/verify.groovy b/maven-archetype-plugin/src/it/projects/ARCHETYPE-622_main_build_settings/verify.groovy
index c5350c5..272ea5a 100644
--- a/maven-archetype-plugin/src/it/projects/ARCHETYPE-622_main_build_settings/verify.groovy
+++ b/maven-archetype-plugin/src/it/projects/ARCHETYPE-622_main_build_settings/verify.groovy
@@ -39,6 +39,6 @@
 assert content.contains("local.central (file://") :
  "test-settings.xml wasn't passed from the main Maven build!: 'local.central (file://' was NOT found in the output! The output was:\n${content}"
 
-def settingsXmlPath = new File("maven-archetype-plugin/target/it/projects/ARCHETYPE-622_main_build_settings/target/classes/archetype-it", "archetype-settings.xml").toPath().toString().replace("\\", "\\\\")
+def settingsXmlPath = new File("maven-archetype-plugin/target/it/projects/ARCHETYPE-622_main_build_settings/target/archetype-it", "archetype-settings.xml").toPath().toString().replace("\\", "\\\\")
 assert content.matches("(?s).*\\[DEBUG\\] Reading user settings from .*" + settingsXmlPath + ".*") : "test-settings.xml wasn't passed from the main Maven build!: 'Reading user settings from ... archetype-settings.xml' was NOT found in the output! The output was:\n${content}"
 
diff --git a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
index 727a265..959b94f 100644
--- a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
+++ b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
@@ -623,37 +623,27 @@
                 request.setProperties(props);
             }
 
+            File archetypeItDirectory = new File(project.getBuild().getDirectory(), "archetype-it");
+            if (archetypeItDirectory.exists()) {
+                FileUtils.deleteDirectory(archetypeItDirectory);
+            }
+            archetypeItDirectory.mkdir();
+            File userSettings;
             if (settingsFile != null) {
-                File interpolatedSettingsDirectory = new File(project.getBuild().getOutputDirectory(), "archetype-it");
-                if (interpolatedSettingsDirectory.exists()) {
-                    FileUtils.deleteDirectory(interpolatedSettingsDirectory);
-                }
-                interpolatedSettingsDirectory.mkdir();
-                File interpolatedSettingsFile =
-                        new File(interpolatedSettingsDirectory, "interpolated-" + settingsFile.getName());
+                userSettings = new File(archetypeItDirectory, "interpolated-" + settingsFile.getName());
 
-                buildInterpolatedFile(settingsFile, interpolatedSettingsFile);
-
-                request.setUserSettingsFile(interpolatedSettingsFile);
-            } else // Use settings coming from the main Maven build
-            {
-                File mainBuildSettingsDirectory = new File(project.getBuild().getOutputDirectory(), "archetype-it");
-                mainBuildSettingsDirectory.mkdir();
-                File mainBuildSettingsFile = new File(mainBuildSettingsDirectory, "archetype-settings.xml");
+                buildInterpolatedFile(settingsFile, userSettings);
+            } else {
+                // Use settings coming from the main Maven build
+                userSettings = new File(archetypeItDirectory, "archetype-settings.xml");
 
                 SettingsXpp3Writer settingsWriter = new SettingsXpp3Writer();
 
-                try (FileWriter fileWriter = new FileWriter(mainBuildSettingsFile)) {
+                try (FileWriter fileWriter = new FileWriter(userSettings)) {
                     settingsWriter.write(fileWriter, settings);
                 }
-
-                if (getLog().isDebugEnabled()) {
-                    getLog().debug("Created archetype-settings.xml with settings from the main Maven build: "
-                            + mainBuildSettingsFile.getAbsolutePath());
-                }
-
-                request.setUserSettingsFile(mainBuildSettingsFile);
             }
+            request.setUserSettingsFile(userSettings);
 
             try {
                 InvocationResult result = invoker.execute(request);
