sbt-s3-resolver
sbt-s3-resolver copied to clipboard
Incompatibility with JDK 9 (by of AWS SDK)
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:
- Adding the flag to an
.sbtoptsfile in your project's root with:-J--add-modules=java.xml.bind,java.activation - Appending the
SBT_OPTSenvironment variable with:--add-modules=java.xml.bind,java.activation
@michaelahlers Thanks for providing the information! I will add a link to this issue in the readme.
This doesn't work for JDK 11 and requires adding jaxb-api dependency manually.
@Tvaroh would you be able to describe the workaround you did for JDK 11?
@pjfanning actually it didn't work for me. So my "workaround" is export JAVA_HOME=`/usr/libexec/java_home -v 1.8.
@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 does it work for multi-module builds?
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.
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 your snippet is not sbt - it is maven
see https://github.com/ohnosequences/sbt-s3-resolver/issues/58#issuecomment-491162131