From 07dfb55318871400cf99561070e968f87dbe0829 Mon Sep 17 00:00:00 2001 From: Jonathan Haber Date: Mon, 8 Jan 2018 15:52:27 -0500 Subject: [PATCH] Add the ability to specify additional import directories --- .../plugins/protoc/ProtocBundledMojo.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/protoc-bundled-plugin/src/main/java/com/comoyo/maven/plugins/protoc/ProtocBundledMojo.java b/protoc-bundled-plugin/src/main/java/com/comoyo/maven/plugins/protoc/ProtocBundledMojo.java index 898025e..c71acfc 100644 --- a/protoc-bundled-plugin/src/main/java/com/comoyo/maven/plugins/protoc/ProtocBundledMojo.java +++ b/protoc-bundled-plugin/src/main/java/com/comoyo/maven/plugins/protoc/ProtocBundledMojo.java @@ -34,6 +34,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -146,6 +147,14 @@ public class ProtocBundledMojo extends AbstractMojo */ private File[] inputDirectories; + /** + * Directories containing *.proto files available to import. + * + * @parameter + * property="importDirectories" + */ + private File[] importDirectories; + /** * Output directory for generated Java class files. * @@ -163,6 +172,14 @@ public class ProtocBundledMojo extends AbstractMojo */ private File[] testInputDirectories; + /** + * Directories containing *.proto files available to import for test. + * + * @parameter + * property="testImportDirectories" + */ + private File[] testImportDirectories; + /** * Output directory for generated Java class files. * @@ -353,15 +370,20 @@ private void ensureProtocBinaryPresent() * @param dir base dir for input file, used to resolve includes * @param input input file to compile */ - private void compileFile(File inputDir, File input, File outputDir) + private void compileFile(File inputDir, File input, File outputDir, File[] importDirs) throws MojoExecutionException { try { + List command = new ArrayList(); + command.add(protocExec.toString()); + command.add("--proto_path=" + inputDir.getAbsolutePath()); + for (File importDir : importDirs) { + command.add("--proto_path=" + importDir.getAbsolutePath()); + } + command.add("--java_out=" + outputDir); + command.add(input.getAbsolutePath()); final Process proc - = new ProcessBuilder(protocExec.toString(), - "--proto_path=" + inputDir.getAbsolutePath(), - "--java_out=" + outputDir, - input.getAbsolutePath()) + = new ProcessBuilder(command.toArray(new String[command.size()])) .redirectErrorStream(true) .start(); final BufferedReader procOut @@ -389,7 +411,7 @@ private void compileFile(File inputDir, File input, File outputDir) * Compile all *.proto files found under inputDirectories. * */ - private boolean compileAllFiles(String tag, File[] inputDirs, File outputDir) + private boolean compileAllFiles(String tag, File[] inputDirs, File[] importDirs, File outputDir) throws MojoExecutionException { final IOFileFilter filter = new SuffixFileFilter(".proto"); @@ -407,7 +429,7 @@ private boolean compileAllFiles(String tag, File[] inputDirs, File outputDir) = FileUtils.iterateFiles(inputDir, filter, TrueFileFilter.INSTANCE); while (files.hasNext()) { final File input = files.next(); - compileFile(inputDir, input, outputDir); + compileFile(inputDir, input, outputDir, importDirs); seen = true; } } @@ -427,14 +449,14 @@ public void execute() if (inputDirectories.length == 0) { inputDirectories = new File[]{new File(project.getBasedir(), "src/main/protobuf")}; } - if (compileAllFiles("main", inputDirectories, outputDirectory)) { + if (compileAllFiles("main", inputDirectories, importDirectories, outputDirectory)) { project.addCompileSourceRoot(outputDirectory.getAbsolutePath()); } if (testInputDirectories.length == 0) { testInputDirectories = new File[]{new File(project.getBasedir(), "src/test/protobuf")}; } - if (compileAllFiles("test", testInputDirectories, testOutputDirectory)) { + if (compileAllFiles("test", testInputDirectories, testImportDirectories, testOutputDirectory)) { project.addTestCompileSourceRoot(testOutputDirectory.getAbsolutePath()); } }