sbt-s3-resolver icon indicating copy to clipboard operation
sbt-s3-resolver copied to clipboard

Incompatibility with JDK 9 (by of AWS SDK)

Open michaelahlers opened this issue 8 years ago • 9 comments

This isn't a bug, per se. More of a tip for anyone using Java 9 who's encountered this error:

[info] 	delivering ivy file to /Users/myuser/Projects/my-project/target/scala-2.12/ivy-0.0.1-SNAPSHOT.xml
[error] java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
[error] 	at com.amazonaws.util.Md5Utils.md5AsBase64(Md5Utils.java:104)
[error] 	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1636)
[error] 	at ohnosequences.ivy.S3Repository.put(S3Repository.java:248)
…
[error] Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
[error] 	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
[error] 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563)
[error] 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
[error] 	at com.amazonaws.util.Md5Utils.md5AsBase64(Md5Utils.java:104)
[error] 	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1636)
[error] 	at ohnosequences.ivy.S3Repository.put(S3Repository.java:248)
…

(Truncated and redacted.)

It's caused aws/aws-sdk-java#1092 and can be easily worked-around thanks to a tip by @jayeshja. In short, passing --add-modules=java.xml.bind,java.activation to Java resolves it.

Two ways this is accomplished with SBT are:

  1. Adding the flag to an .sbtopts file in your project's root with:
    -J--add-modules=java.xml.bind,java.activation
    
  2. Appending the SBT_OPTS environment variable with:
    --add-modules=java.xml.bind,java.activation
    

michaelahlers avatar Oct 15 '17 22:10 michaelahlers

@michaelahlers Thanks for providing the information! I will add a link to this issue in the readme.

laughedelic avatar Oct 16 '17 12:10 laughedelic

This doesn't work for JDK 11 and requires adding jaxb-api dependency manually.

Tvaroh avatar Nov 27 '18 09:11 Tvaroh

@Tvaroh would you be able to describe the workaround you did for JDK 11?

pjfanning avatar Feb 05 '19 15:02 pjfanning

@pjfanning actually it didn't work for me. So my "workaround" is export JAVA_HOME=`/usr/libexec/java_home -v 1.8.

Tvaroh avatar Feb 06 '19 20:02 Tvaroh

@Tvaroh @pjfanning

importing "javax.xml.bind" % "jaxb-api" % "2.3.0", "com.sun.xml.bind" % "jaxb-ri" % "2.3.0"

in project/build.sbt worked for me.

schneist avatar May 10 '19 05:05 schneist

@schneist does it work for multi-module builds?

Tvaroh avatar May 12 '19 08:05 Tvaroh

sorry I ran into an issue with an aws library being outdated later, and did not continue to investigate. But the ClassNotFoundException was gone for a multi-mode build too.

schneist avatar May 13 '19 11:05 schneist

Does this work at all for java-11, Adding dependencies as below did not work for me.

<dependencies>
 <dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
  </dependency>
  <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
  </dependency>
  <dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
    </dependency>
</dependencies>

franchev avatar Jan 29 '20 17:01 franchev

@franchev your snippet is not sbt - it is maven

see https://github.com/ohnosequences/sbt-s3-resolver/issues/58#issuecomment-491162131

pjfanning avatar Jan 29 '20 19:01 pjfanning