Add a `--hermetic_java_home=` flag to singlejar
PiperOrigin-RevId: 445519501
diff --git a/src/tools/singlejar/options.cc b/src/tools/singlejar/options.cc
index 692e306..0c81f58 100644
--- a/src/tools/singlejar/options.cc
+++ b/src/tools/singlejar/options.cc
@@ -55,7 +55,8 @@
&warn_duplicate_resources) ||
tokens->MatchAndSet("--nocompress_suffixes", &nocompress_suffixes) ||
tokens->MatchAndSet("--check_desugar_deps", &check_desugar_deps) ||
- tokens->MatchAndSet("--multi_release", &multi_release)) {
+ tokens->MatchAndSet("--multi_release", &multi_release) ||
+ tokens->MatchAndSet("--hermetic_java_home", &hermetic_java_home)) {
return true;
} else if (tokens->MatchAndSet("--build_info_file", &optarg)) {
build_info_files.push_back(optarg);
diff --git a/src/tools/singlejar/options.h b/src/tools/singlejar/options.h
index 23b96c9..149f999 100644
--- a/src/tools/singlejar/options.h
+++ b/src/tools/singlejar/options.h
@@ -65,6 +65,7 @@
bool warn_duplicate_resources;
bool check_desugar_deps;
bool multi_release;
+ std::string hermetic_java_home;
protected:
/*
diff --git a/src/tools/singlejar/options_test.cc b/src/tools/singlejar/options_test.cc
index 2d2b831..b795d44 100644
--- a/src/tools/singlejar/options_test.cc
+++ b/src/tools/singlejar/options_test.cc
@@ -20,11 +20,10 @@
#include "googletest/include/gtest/gtest.h"
TEST(OptionsTest, Flags1) {
- const char *args[] = {"--exclude_build_data",
- "--compression",
- "--normalize",
- "--no_duplicates",
- "--output", "output_jar"};
+ const char *args[] = {
+ "--exclude_build_data", "--compression", "--normalize",
+ "--no_duplicates", "--output", "output_jar",
+ "--hermetic_java_home", "hermetic_java_home"};
Options options;
options.ParseCommandLine(arraysize(args), args);
@@ -38,6 +37,7 @@
EXPECT_FALSE(options.check_desugar_deps);
EXPECT_FALSE(options.multi_release);
EXPECT_EQ("output_jar", options.output_jar);
+ EXPECT_EQ("hermetic_java_home", options.hermetic_java_home);
}
TEST(OptionsTest, Flags2) {
@@ -60,6 +60,7 @@
ASSERT_TRUE(options.warn_duplicate_resources);
ASSERT_TRUE(options.check_desugar_deps);
ASSERT_TRUE(options.multi_release);
+ EXPECT_EQ("", options.hermetic_java_home);
}
TEST(OptionsTest, SingleOptargs) {
diff --git a/src/tools/singlejar/output_jar.cc b/src/tools/singlejar/output_jar.cc
index f47e8bd..923ed10 100644
--- a/src/tools/singlejar/output_jar.cc
+++ b/src/tools/singlejar/output_jar.cc
@@ -145,6 +145,9 @@
if (options_->multi_release) {
manifest_.EnableMultiRelease();
}
+ if (!options_->hermetic_java_home.empty()) {
+ manifest_.AppendLine("Hermetic-Java-Home: " + options_->hermetic_java_home);
+ }
for (auto &manifest_line : options_->manifest_lines) {
if (!manifest_line.empty()) {
manifest_.AppendLine(manifest_line);
diff --git a/src/tools/singlejar/output_jar_simple_test.cc b/src/tools/singlejar/output_jar_simple_test.cc
index ee9d11b..f96b5c7 100644
--- a/src/tools/singlejar/output_jar_simple_test.cc
+++ b/src/tools/singlejar/output_jar_simple_test.cc
@@ -989,4 +989,17 @@
manifest);
}
+// --hermetic_java_home
+TEST_F(OutputJarSimpleTest, HermeticJavaHome) {
+ string out_path = OutputFilePath("out.jar");
+ CreateOutput(out_path, {"--hermetic_java_home", "foo/bar/java_home"});
+ string manifest = GetEntryContents(out_path, "META-INF/MANIFEST.MF");
+ EXPECT_EQ(
+ "Manifest-Version: 1.0\r\n"
+ "Created-By: singlejar\r\n"
+ "Hermetic-Java-Home: foo/bar/java_home\r\n"
+ "\r\n",
+ manifest);
+}
+
} // namespace