Add --manifest_file option into BazelJavaBuilder 

Now Bazel JavaBuilder can specifiy a file as the manifest file, before
this it just creates the manifest file on the fly.

--
Change-Id: I515d63a008e2c9e9113c56d3646b8bc78b76b3a7
Reviewed-on: https://cr.bazel.build/8352
PiperOrigin-RevId: 145428635
MOS_MIGRATED_REVID=145428635
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java
index ece6484..5ab5760 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java
@@ -67,6 +67,8 @@
   private final String classDir;
   private final String tempDir;
 
+  private final String manifestFile;
+
   private JacocoInstrumentationProcessor jacocoInstrumentationProcessor;
 
   private final boolean compressJar;
@@ -156,6 +158,7 @@
     this.extdir = optionsParser.getExtdir();
     this.processorPath = optionsParser.getProcessorPath();
     this.processorNames = optionsParser.getProcessorNames();
+    this.manifestFile = optionsParser.getManifestFile();
     // Since the default behavior of this tool with no arguments is "rm -fr <classDir>", let's not
     // default to ".", shall we?
     if (optionsParser.getClassDir() != null) {
@@ -264,6 +267,10 @@
     return tempDir;
   }
 
+  public String getManifestFile() {
+    return manifestFile;
+  }
+
   public JacocoInstrumentationProcessor getJacocoInstrumentationProcessor() {
     return jacocoInstrumentationProcessor;
   }
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java
index 7815284..735e3ec 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java
@@ -55,6 +55,7 @@
   private String sourceGenDir;
   private String generatedSourcesOutputJar;
   private String manifestProtoPath;
+  private String manifestFile;
   private final Set<String> sourceRoots = new HashSet<>();
 
   private final List<String> sourceFiles = new ArrayList<>();
@@ -145,6 +146,9 @@
         case "--output_manifest_proto":
           manifestProtoPath = getArgument(argQueue, arg);
           break;
+        case "--manifest_file":
+          manifestFile = getArgument(argQueue, arg);
+          break;
         case "--source_roots":
           collectFlagArguments(sourceRoots, argQueue, "-");
           break;
@@ -372,6 +376,10 @@
     return manifestProtoPath;
   }
 
+  public String getManifestFile() {
+    return manifestFile;
+  }
+
   public Set<String> getSourceRoots() {
     return sourceRoots;
   }
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java
index eb03a9b..412b6b0 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/SimpleJavaLibraryBuilder.java
@@ -195,6 +195,7 @@
     JarCreator jar = new JarCreator(build.getOutputJar());
     jar.setNormalize(true);
     jar.setCompression(build.compressJar());
+    jar.setManifestFile(build.getManifestFile());
 
     for (String resourceJar : build.getResourceJars()) {
       for (Path root : getJarFileSystem(Paths.get(resourceJar)).getRootDirectories()) {