NoClassDefFoundError: jakarta/xml/bind/JAXBElement
viveleroi opened this issue · comments
I'm trying to use the generator class from a custom java class we execute from gradle. Using the gradle plugin with the same settings worked fine but now that I've ported things to our java class, it scans the classes but then throws the following error on java 11:
Scanning classpath
Scanning finished in 1.05 seconds. Total number of classes: 29258.
Found 3 classes matching pattern.
Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/xml/bind/JAXBElement
at cz.habarta.typescript.generator.DefaultTypeProcessor.getKnownClasses(DefaultTypeProcessor.java:236)
at cz.habarta.typescript.generator.DefaultTypeProcessor.<init>(DefaultTypeProcessor.java:41)
at cz.habarta.typescript.generator.TypeScriptGenerator.createTypeProcessor(TypeScriptGenerator.java:169)
at cz.habarta.typescript.generator.TypeScriptGenerator.getCommonTypeProcessor(TypeScriptGenerator.java:156)
at cz.habarta.typescript.generator.TypeScriptGenerator.lambda$createModelParser$1(TypeScriptGenerator.java:184)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at cz.habarta.typescript.generator.TypeScriptGenerator.createModelParser(TypeScriptGenerator.java:185)
at cz.habarta.typescript.generator.TypeScriptGenerator.getModelParser(TypeScriptGenerator.java:176)
at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:73)
at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:68)
at mil.navy.msc.tatsu.util.TypescriptGenerator.main(TypescriptGenerator.java:96)
Caused by: java.lang.ClassNotFoundException: jakarta.xml.bind.JAXBElement
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 17 more
Here's the java I'm using:
Settings settings = new Settings();
settings.indentString = " ";
settings.jsonLibrary = JsonLibrary.jackson2;
settings.noEslintDisable = true;
settings.noFileComment = true;
settings.noTslintDisable = true;
settings.outputKind = TypeScriptOutputKind.module;
TypeScriptGenerator generator = new TypeScriptGenerator(settings);
Parameters tsGenParameters = new Parameters();
tsGenParameters.classNamePatterns = new ArrayList<>();
tsGenParameters.classNamePatterns.add("com.example.model.*");
String definitions = generator.generateTypeScript(Input.from(tsGenParameters));
This code worked just fine when I used the gradle plugin:
generateTypeScript {
jsonLibrary = 'jackson2'
classPatterns = [
'com.example.model.**'
]
indentString = ' '
noEslintDisable = true
noFileComment = true
noTslintDisable = true
outputKind = 'module'
outputFile = './app/types/api.d.ts'
}
Because the error is coming from this library and there's no clear documentation on java usage, I can't tell if I've missed something or if this is a bug.
Looking at the gradle libs, the jakarta lib has a javax
package name, not jakarta
like the error:
The problem is that we have another dependency that includes v2.3.3 of the bind-api and gradle is forcing resolution to 2.3.3