diff --git a/src/java/io/bazel/rulesscala/jar/JarCreator.java b/src/java/io/bazel/rulesscala/jar/JarCreator.java index c98c3f6ab..33d002a47 100644 --- a/src/java/io/bazel/rulesscala/jar/JarCreator.java +++ b/src/java/io/bazel/rulesscala/jar/JarCreator.java @@ -173,6 +173,16 @@ public void execute() throws IOException { } } + @Override + protected boolean ignoreFileName(String name) { + /* + * It does not make sense to copy signature files + * into a fat jar because the jar signature will + * be broken + */ + return (name.endsWith(".DSA") || name.endsWith(".RSA")); + } + public static void buildJar(String[] args) throws IOException { if (args.length < 1) { System.err.println("usage: CreateJar [-m manifest] output [root directories]"); diff --git a/src/java/io/bazel/rulesscala/jar/JarHelper.java b/src/java/io/bazel/rulesscala/jar/JarHelper.java index d51956972..44707413a 100644 --- a/src/java/io/bazel/rulesscala/jar/JarHelper.java +++ b/src/java/io/bazel/rulesscala/jar/JarHelper.java @@ -177,17 +177,21 @@ protected void writeManifestEntry(byte[] content) throws IOException { } } + protected boolean ignoreFileName(String name) { + return false; + } + /** * This copies the contents of jarFile into out * This is a static method to make it clear what is mutated (and it * was written by someone who really likes to minimize state changes). */ - static private void copyJar(JarFile nameJf, Set names, JarOutputStream out) throws IOException { + private void copyJar(JarFile nameJf, Set names, JarOutputStream out) throws IOException { byte[] buffer = new byte[2048]; for (Enumeration e = nameJf.entries(); e.hasMoreElements();) { JarEntry existing = e.nextElement(); String name = existing.getName(); - if (!names.contains(name)) { + if (!(ignoreFileName(name) || names.contains(name))) { JarEntry outEntry = new JarEntry(name); outEntry.setTime(existing.getTime()); outEntry.setSize(existing.getSize()); diff --git a/test/BUILD b/test/BUILD index 08fe5dcd4..4ad2d2a17 100644 --- a/test/BUILD +++ b/test/BUILD @@ -374,3 +374,27 @@ scala_library( srcs = ["src/main/scala/scala/test/utf8/JavaClassWithUtf8.java", "src/main/scala/scala/test/utf8/ScalaClassWithUtf8.scala"] ) + +# make sure making a fat jar strips signatures +java_import( + name = "fakejar", + jars = ["fake_sig.jar"]) + +scala_binary( + name = "ScalaBinary_with_fake", + srcs = ["ScalaBinary.scala"], + main_class = "scala.test.ScalaBinary", + deps = [":HelloLib", ":MacroTest", ":fakejar"], +) + +py_binary( + name = "jar_lister", + srcs = ["jar_lister.py"] +) + +sh_test( + name = "no_sig", + srcs = ["no_sigs.sh"], + args = ["$(location //test:jar_lister)", "$(location //test:ScalaBinary_with_fake_deploy.jar)"], + data = [":ScalaBinary_with_fake_deploy.jar", ":jar_lister"], +) diff --git a/test/fake_sig.jar b/test/fake_sig.jar new file mode 100644 index 000000000..b76b2261c Binary files /dev/null and b/test/fake_sig.jar differ diff --git a/test/jar_lister.py b/test/jar_lister.py new file mode 100644 index 000000000..3c3992bcc --- /dev/null +++ b/test/jar_lister.py @@ -0,0 +1,5 @@ +import zipfile +import sys + +for n in zipfile.ZipFile(sys.argv[1]).namelist(): + print n diff --git a/test/no_sigs.sh b/test/no_sigs.sh new file mode 100755 index 000000000..756ecfd7c --- /dev/null +++ b/test/no_sigs.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +OUTPUT1=`$1 $2 | grep DSA` +OUTPUT2=`$1 $2 | grep RSA` + +if [[ $OUTPUT1 ]]; then + echo $OUTPUT1 + exit 1 +fi +if [[ $OUTPUT2 ]]; then + echo $OUTPUT2 + exit 1 +fi