Exception in thread "main" java.lang.IllegalArgumentException: Non-empty
directory: META-INF/services
at
com.sun.java.util.jar.pack.PackerImpl$DoPack.readFile(PackerImpl.java:546)
at
com.sun.java.util.jar.pack.PackerImpl$DoPack.run(PackerImpl.java:492)
at com.sun.java.util.jar.pack.PackerImpl.pack(PackerImpl.java:99)
at com.sun.java.util.jar.pack.Driver.main(Driver.java:313)
It seems to be interacting with the 'services' directory in the fasterxml
jar. The clojure build tool, lein, creates an uberjar via the
java.util.zip.ZipOutputStream, and friends. Code here:
https://github.com/technomancy/leiningen/blob/master/src/leiningen/uberjar.clj
When both h2 and fasterxml are included, the resulting jar has a non-empty
directory. The h2 jar looks unusual because it has no directory entries.
The fasterxml jar looks unusual because the directories (listed with unzip
-lv) are shown as Defl:N instead of Stored.
I really think it's a lein problem, but I haven't been able to determine
exactly what it doesn't like about the combination of these two jars. If I
unzip/re-zip the uberjar, it eliminates the non-empty directory in the jar,
and pack200 is happy with it. If I unzip and re-zip the h2 and fasterxml
jars, it doesn't seem to have any effect. This is odd to me, because the
re-zip makes both jars look normal: directory entries for all directories,
shown as Stored, not Defl:N. Not sure why the combination still fails.
Maybe the failure is unrelated to these issues.
On Friday, December 5, 2014 2:06:45 AM UTC-8, Thomas Mueller wrote:
>
> Hi,
>
> The H2 jar files are built using the java.util.jar.JarOutputStream, and so
> far I didn't know about any problems with this approach.
>
> I think I found the place where pack200 throws this exception:
> http://www.docjar.com/html/api/com/sun/java/util/jar/pack/PackerImpl.java.html
>
> Package.File file = pkg.new File(fname);
> 544 file.readFrom(in);
> 545 if (file.isDirectory() && file.getFileLength() != 0)
> 546 throw new IllegalArgumentException("Non-empty
> directory: "+file.getFileName());
> 547 return file;
>
> The problems seems to be that there are directories that are not empty.
> But I don't think that's from H2. What is the complete exception message?
>
> Regards,
> Thomas
>
> On Thu, Dec 4, 2014 at 6:10 PM, Brian Craft <[email protected]
> <javascript:>> wrote:
>
>> The h2 jar doesn't have entries for directories. This seems to be causing
>> problems with down-stream build tools. Building an uber-jar, then passing
>> through pack200, it throws a "non-empty directory" exception. I suspect
>> it's the uber-jar build that is broken, but am also wondering why the h2
>> jars have no directory entries. Is this also due to pack200?
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "H2 Database" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/h2-database.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.