diff --git a/src/it/append-dirs-nomerge/folder1/file11.txt b/src/it/merge-dirs-complex/folder1/file11.txt
old mode 100644
new mode 100755
similarity index 100%
rename from src/it/append-dirs-nomerge/folder1/file11.txt
rename to src/it/merge-dirs-complex/folder1/file11.txt
diff --git a/src/it/append-dirs-nomerge/folder1/file12.txt b/src/it/merge-dirs-complex/folder1/file12.txt
old mode 100644
new mode 100755
similarity index 100%
rename from src/it/append-dirs-nomerge/folder1/file12.txt
rename to src/it/merge-dirs-complex/folder1/file12.txt
diff --git a/src/it/append-dirs-nomerge/folder2/file11.txt b/src/it/merge-dirs-complex/folder2/file11.txt
old mode 100644
new mode 100755
similarity index 100%
rename from src/it/append-dirs-nomerge/folder2/file11.txt
rename to src/it/merge-dirs-complex/folder2/file11.txt
diff --git a/src/it/append-dirs-nomerge/folder2/file21.txt b/src/it/merge-dirs-complex/folder2/file21.txt
old mode 100644
new mode 100755
similarity index 100%
rename from src/it/append-dirs-nomerge/folder2/file21.txt
rename to src/it/merge-dirs-complex/folder2/file21.txt
diff --git a/src/it/merge-dirs-complex/pom.xml b/src/it/merge-dirs-complex/pom.xml
new file mode 100755
index 0000000..b5653bf
--- /dev/null
+++ b/src/it/merge-dirs-complex/pom.xml
@@ -0,0 +1,79 @@
+
+
+
+ 4.0.0
+
+ com.inteligr8
+ merge-maven-plugin-text-files
+ @pom.version@
+ pom
+
+ Text Files Plugin Tests
+
+
+
+
+ ${project.groupId}
+ merge-maven-plugin
+ @pom.version@
+
+
+ merge-simple
+ validate
+
+ merge-dirs
+
+
+
+
+ ${basedir}
+
+ *
+
+
+ *.log
+ pom.xml
+ target
+
+ target
+
+
+
+
+
+
+
+ maven-enforcer-plugin
+ 1.4.1
+
+
+ assert
+ enforce
+
+
+
+ 8
+ 15
+
+ target/file11.txt
+
+
+
+ 3
+ 8
+
+ target/file12.txt
+ target/file21.txt
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/it/append-dirs-empty/pom.xml b/src/it/merge-files-empty/pom.xml
similarity index 93%
rename from src/it/append-dirs-empty/pom.xml
rename to src/it/merge-files-empty/pom.xml
index 4f02e44..17a2778 100644
--- a/src/it/append-dirs-empty/pom.xml
+++ b/src/it/merge-files-empty/pom.xml
@@ -20,10 +20,10 @@
@pom.version@
- append-simple
+ merge-simple
validate
- append-dirs
+ merge-files
diff --git a/src/it/append-dirs-simple/folder1/file11.txt b/src/it/merge-files-nomerge/folder1/file11.txt
similarity index 100%
rename from src/it/append-dirs-simple/folder1/file11.txt
rename to src/it/merge-files-nomerge/folder1/file11.txt
diff --git a/src/it/append-dirs-simple/folder1/file12.txt b/src/it/merge-files-nomerge/folder1/file12.txt
similarity index 100%
rename from src/it/append-dirs-simple/folder1/file12.txt
rename to src/it/merge-files-nomerge/folder1/file12.txt
diff --git a/src/it/append-dirs-simple/folder2/file11.txt b/src/it/merge-files-nomerge/folder2/file11.txt
similarity index 100%
rename from src/it/append-dirs-simple/folder2/file11.txt
rename to src/it/merge-files-nomerge/folder2/file11.txt
diff --git a/src/it/append-dirs-simple/folder2/file21.txt b/src/it/merge-files-nomerge/folder2/file21.txt
similarity index 100%
rename from src/it/append-dirs-simple/folder2/file21.txt
rename to src/it/merge-files-nomerge/folder2/file21.txt
diff --git a/src/it/append-dirs-nomerge/pom.xml b/src/it/merge-files-nomerge/pom.xml
similarity index 93%
rename from src/it/append-dirs-nomerge/pom.xml
rename to src/it/merge-files-nomerge/pom.xml
index 2523e0d..3a41467 100644
--- a/src/it/append-dirs-nomerge/pom.xml
+++ b/src/it/merge-files-nomerge/pom.xml
@@ -20,10 +20,10 @@
@pom.version@
- append-simple
+ merge-simple
validate
- append-dirs
+ merge-files
diff --git a/src/it/merge-files-simple/folder1/file11.txt b/src/it/merge-files-simple/folder1/file11.txt
new file mode 100644
index 0000000..a5bce3f
--- /dev/null
+++ b/src/it/merge-files-simple/folder1/file11.txt
@@ -0,0 +1 @@
+test1
diff --git a/src/it/merge-files-simple/folder1/file12.txt b/src/it/merge-files-simple/folder1/file12.txt
new file mode 100644
index 0000000..a5bce3f
--- /dev/null
+++ b/src/it/merge-files-simple/folder1/file12.txt
@@ -0,0 +1 @@
+test1
diff --git a/src/it/merge-files-simple/folder2/file11.txt b/src/it/merge-files-simple/folder2/file11.txt
new file mode 100644
index 0000000..180cf83
--- /dev/null
+++ b/src/it/merge-files-simple/folder2/file11.txt
@@ -0,0 +1 @@
+test2
diff --git a/src/it/merge-files-simple/folder2/file21.txt b/src/it/merge-files-simple/folder2/file21.txt
new file mode 100644
index 0000000..180cf83
--- /dev/null
+++ b/src/it/merge-files-simple/folder2/file21.txt
@@ -0,0 +1 @@
+test2
diff --git a/src/it/append-dirs-simple/pom.xml b/src/it/merge-files-simple/pom.xml
similarity index 93%
rename from src/it/append-dirs-simple/pom.xml
rename to src/it/merge-files-simple/pom.xml
index 559b0f1..cf18ad5 100644
--- a/src/it/append-dirs-simple/pom.xml
+++ b/src/it/merge-files-simple/pom.xml
@@ -20,10 +20,10 @@
@pom.version@
- append-simple
+ merge-simple
validate
- append-dirs
+ merge-files
diff --git a/src/main/java/com/inteligr8/maven/merge/AbstractAppendMojo.java b/src/main/java/com/inteligr8/maven/merge/AbstractFileContentMojo.java
similarity index 98%
rename from src/main/java/com/inteligr8/maven/merge/AbstractAppendMojo.java
rename to src/main/java/com/inteligr8/maven/merge/AbstractFileContentMojo.java
index cbb5dfd..959762b 100644
--- a/src/main/java/com/inteligr8/maven/merge/AbstractAppendMojo.java
+++ b/src/main/java/com/inteligr8/maven/merge/AbstractFileContentMojo.java
@@ -31,7 +31,7 @@ import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
-public abstract class AbstractAppendMojo extends AbstractMojo {
+public abstract class AbstractFileContentMojo extends AbstractMojo {
@Parameter( defaultValue = "${project}", readonly = true )
protected MavenProject project;
diff --git a/src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java b/src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java
new file mode 100755
index 0000000..45f5b32
--- /dev/null
+++ b/src/main/java/com/inteligr8/maven/merge/AbstractMergeMojo.java
@@ -0,0 +1,116 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+package com.inteligr8.maven.merge;
+
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.shared.model.fileset.FileSet;
+import org.apache.maven.shared.model.fileset.util.FileSetManager;
+
+public abstract class AbstractMergeMojo extends AbstractFileContentMojo {
+
+ @Parameter( property = "filesets", required = true )
+ protected List filesets;
+
+ protected boolean mergeInFileSet(boolean directory) throws MojoExecutionException {
+ if (this.getLog().isDebugEnabled())
+ this.getLog().debug("merge " + (directory ? "directories" : "files"));
+
+ boolean didMerge = false;
+ FileSetManager fsman = new FileSetManager(this.getLog());
+ Path basepath = this.project.getBasedir().toPath();
+
+ try {
+ for (FileSet fileSet : this.filesets) {
+ Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), false, "fileset input");
+ final Path baseOutputPath = this.resolveDirectory(basepath, fileSet.getOutputDirectory(), true, "fileset output");
+
+ String[] filePathsAndNames = directory ? fsman.getIncludedDirectories(fileSet) : fsman.getIncludedFiles(fileSet);
+ for (String filePathAndName : filePathsAndNames) {
+ Path file = baseInputPath.resolve(filePathAndName);
+
+ if (Files.isDirectory(file)) {
+ if (this.getLog().isDebugEnabled())
+ this.getLog().debug("merging directory: " + filePathAndName);
+
+ final Path baseDirInputPath = file;
+
+ Files.walkFileTree(file, new FileVisitor() {
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
+ return FileVisitResult.TERMINATE;
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Path filePathAndName = baseDirInputPath.relativize(file);
+ Path tofile = baseOutputPath.resolve(filePathAndName);
+ AbstractMergeMojo.this.mergeFile(file, tofile, Files.exists(tofile));
+ if (!Files.exists(tofile.getParent()))
+ Files.createDirectories(tofile.getParent());
+
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ } else {
+ Path tofile = baseOutputPath.resolve(filePathAndName);
+ didMerge = this.mergeFile(file, tofile, didMerge);
+ }
+ }
+ }
+ } catch (IOException ie) {
+ throw new MojoExecutionException("Execution failed due to an I/O related issue", ie);
+ }
+
+ return didMerge;
+ }
+
+ private boolean mergeFile(Path file, Path tofile, boolean alreadyMergedOnce) throws IOException {
+ if (this.getLog().isDebugEnabled())
+ this.getLog().debug("merging file: '" + file + "' => '" + tofile + "'");
+
+ if (!Files.exists(tofile.getParent()))
+ Files.createDirectories(tofile.getParent());
+
+ if (alreadyMergedOnce && this.spacing > 0) {
+ StringBuilder strbuilder = new StringBuilder();
+ for (int s = 0; s < this.spacing; s++)
+ strbuilder.append(this.lineEnding);
+ if (strbuilder.length() > 0)
+ this.appendText(strbuilder.toString(), tofile);
+ }
+
+ alreadyMergedOnce = this.appendFileContent(file, tofile) || alreadyMergedOnce;
+ return alreadyMergedOnce;
+ }
+
+}
diff --git a/src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java b/src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java
deleted file mode 100644
index bdce4fc..0000000
--- a/src/main/java/com/inteligr8/maven/merge/AppendDirectoriesContentMojo.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see .
- */
-package com.inteligr8.maven.merge;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.shared.model.fileset.FileSet;
-import org.apache.maven.shared.model.fileset.util.FileSetManager;
-import org.codehaus.plexus.component.annotations.Component;
-
-@Mojo( name = "append-dirs", threadSafe = true )
-@Component( role = org.apache.maven.plugin.Mojo.class )
-public class AppendDirectoriesContentMojo extends AbstractAppendMojo {
-
- @Parameter( property = "filesets", required = true )
- protected List filesets;
-
- @Override
- public void execute() throws MojoExecutionException {
- this.getLog().debug("Executing file append");
-
- this.appendContentInFileSet();
- }
-
- private boolean appendContentInFileSet() throws MojoExecutionException {
- boolean didMerge = false;
- FileSetManager fsman = new FileSetManager(this.getLog());
- Path basepath = this.project.getBasedir().toPath();
-
- try {
- for (FileSet fileSet : this.filesets) {
- Path baseInputPath = this.resolveDirectory(basepath, fileSet.getDirectory(), false, "fileset input");
- Path baseOutputPath = this.resolveDirectory(basepath, fileSet.getOutputDirectory(), true, "fileset output");
-
- String[] filePathsAndNames = fsman.getIncludedFiles(fileSet);
- for (String filePathAndName : filePathsAndNames) {
- Path file = baseInputPath.resolve(filePathAndName);
- Path tofile = baseOutputPath.resolve(filePathAndName);
- if (!Files.exists(tofile.getParent()))
- Files.createDirectories(tofile.getParent());
-
- if (!Files.isDirectory(file)) {
- if (didMerge && this.spacing > 0) {
- StringBuilder strbuilder = new StringBuilder();
- for (int s = 0; s < this.spacing; s++)
- strbuilder.append(this.lineEnding);
- if (strbuilder.length() > 0)
- this.appendText(strbuilder.toString(), tofile);
- }
-
- didMerge = this.appendFileContent(file, tofile) || didMerge;
- }
- }
- }
- } catch (IOException ie) {
- throw new MojoExecutionException("Execution failed due to an I/O related issue", ie);
- }
-
- return didMerge;
- }
-
-}
diff --git a/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java b/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java
index fac5d00..e7f331a 100644
--- a/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java
+++ b/src/main/java/com/inteligr8/maven/merge/AppendFilesContentMojo.java
@@ -28,7 +28,7 @@ import org.codehaus.plexus.component.annotations.Component;
@Mojo( name = "append-files", threadSafe = true )
@Component( role = org.apache.maven.plugin.Mojo.class )
-public class AppendFilesContentMojo extends AbstractAppendMojo {
+public class AppendFilesContentMojo extends AbstractFileContentMojo {
@Parameter( property = "filesets", required = true )
protected List filesets;
diff --git a/src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java b/src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java
new file mode 100644
index 0000000..d78ac35
--- /dev/null
+++ b/src/main/java/com/inteligr8/maven/merge/MergeDirectoriesMojo.java
@@ -0,0 +1,32 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+package com.inteligr8.maven.merge;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Mojo( name = "merge-dirs", threadSafe = true )
+@Component( role = org.apache.maven.plugin.Mojo.class )
+public class MergeDirectoriesMojo extends AbstractMergeMojo {
+
+ @Override
+ public void execute() throws MojoExecutionException {
+ this.getLog().debug("Executing directory merge");
+
+ this.mergeInFileSet(true);
+ }
+
+}
diff --git a/src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java b/src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java
new file mode 100755
index 0000000..71866fe
--- /dev/null
+++ b/src/main/java/com/inteligr8/maven/merge/MergeFilesMojo.java
@@ -0,0 +1,32 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see .
+ */
+package com.inteligr8.maven.merge;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.codehaus.plexus.component.annotations.Component;
+
+@Mojo( name = "merge-files", threadSafe = true )
+@Component( role = org.apache.maven.plugin.Mojo.class )
+public class MergeFilesMojo extends AbstractMergeMojo {
+
+ @Override
+ public void execute() throws MojoExecutionException {
+ this.getLog().debug("Executing file merge");
+
+ this.mergeInFileSet(false);
+ }
+
+}
diff --git a/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java b/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java
index 382a82f..1c87921 100644
--- a/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java
+++ b/src/test/java/com/inteligr8/maven/merge/FileSetUnitTest.java
@@ -20,9 +20,9 @@ public class FileSetUnitTest {
FileSetManager fsman = new FileSetManager();
Set files = new HashSet<>(Arrays.asList(fsman.getIncludedFiles(fileset)));
- Assert.assertTrue(files.size() > 2);
+ Assert.assertTrue(files.size() > 4);
System.err.println(files);
- Assert.assertTrue(files.contains("com/inteligr8/maven/merge/AbstractAppendMojo.java".replace("/", File.separator)));
+ Assert.assertTrue(files.contains("com/inteligr8/maven/merge/AbstractMergeMojo.java".replace("/", File.separator)));
}
}