I observed multiple problems using the smithy-java gradle plugin (after installing it to MavenLocal, since it isn't published anywhere):
/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:115: error: cannot find symbol
static List<ChecksumAlgorithm> deserializeChecksumAlgorithmSet(Schema schema, ShapeDeserializer deserializer) {
^
symbol: class ChecksumAlgorithm
location: class SharedSerde
The .java file for ChecksumAlgorithm is adjacent to the java file for SharedSerde, so this appears to be an issue configuring the compiler.
In addition to that, the generated SharedSerde.java file contains duplicate methods and nested classes:
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:154: error: method deserializeStringList(Schema,ShapeDeserializer) is already defined in class SharedSerde
static List<String> deserializeStringList(Schema schema, ShapeDeserializer deserializer) {
^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:193: error: method deserializeStringList(Schema,ShapeDeserializer) is already defined in class SharedSerde
static List<String> deserializeStringList(Schema schema, ShapeDeserializer deserializer) {
^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:135: error: class StringListSerializer is already defined in class SharedSerde
static final class StringListSerializer implements BiConsumer<List<String>, ShapeSerializer> {
^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:161: error: class StringList$MemberDeserializer is already defined in class SharedSerde
private static final class StringList$MemberDeserializer implements ShapeDeserializer.ListMemberConsumer<List<String>> {
^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:174: error: class StringListSerializer is already defined in class SharedSerde
static final class StringListSerializer implements BiConsumer<List<String>, ShapeSerializer> {
^
/model/build/smithyprojections/model/source/java-codegen/java/my/company/publicapi/v2/model/SharedSerde.java:200: error: class StringList$MemberDeserializer is already defined in class SharedSerde
private static final class StringList$MemberDeserializer implements ShapeDeserializer.ListMemberConsumer<List<String>> {
Attempting workarounds by following the instructions to apply smithy-base directly I get a different error:
Running smithy build
SUCCESS: Validated 335 shapes
Validated model, now starting projections...
Projection source failed: java.lang.NoSuchMethodError: 'java.lang.String software.amazon.smithy.java.codegen.writer.JavaWriter.defer(java.util.function.Supplier)'
java.lang.NoSuchMethodError: 'java.lang.String software.amazon.smithy.java.codegen.writer.JavaWriter.defer(java.util.function.Supplier)'
at software.amazon.smithy.java.codegen.writer.JavaWriter.access$000(JavaWriter.java:32)
at software.amazon.smithy.java.codegen.writer.JavaWriter$JavaTypeFormatter.getPlaceholder(JavaWriter.java:225)
at software.amazon.smithy.java.codegen.writer.JavaWriter$JavaTypeFormatter.apply(JavaWriter.java:198)
at software.amazon.smithy.java.codegen.writer.JavaWriter$JavaTypeFormatter.apply(JavaWriter.java:192)
at software.amazon.smithy.utils.AbstractCodeWriter.applyFormatter(AbstractCodeWriter.java:2079)
at software.amazon.smithy.utils.CodeFormatter$Operation.lambda$formatted$1(CodeFormatter.java:97)
at software.amazon.smithy.utils.CodeFormatter$BlockOperation$Unconditional.apply(CodeFormatter.java:217)
at software.amazon.smithy.utils.CodeFormatter.run(CodeFormatter.java:30)
at software.amazon.smithy.utils.AbstractCodeWriter.format(AbstractCodeWriter.java:1755)
at software.amazon.smithy.utils.AbstractCodeWriter.write(AbstractCodeWriter.java:1814)
at software.amazon.smithy.java.codegen.generators.EnumGenerator.lambda$accept$0(EnumGenerator.java:102)
at software.amazon.smithy.codegen.core.WriterDelegator.useSymbolWriter(WriterDelegator.java:192)
at software.amazon.smithy.codegen.core.WriterDelegator.useShapeWriter(WriterDelegator.java:218)
at software.amazon.smithy.java.codegen.generators.EnumGenerator.accept(EnumGenerator.java:45)
at software.amazon.smithy.java.codegen.DirectedJavaCodegen.generateEnumShape(DirectedJavaCodegen.java:125)
at software.amazon.smithy.codegen.core.directed.CodegenDirector$ShapeGenerator.enumShape(CodegenDirector.java:654)
at software.amazon.smithy.codegen.core.directed.CodegenDirector$ShapeGenerator.enumShape(CodegenDirector.java:573)
at software.amazon.smithy.model.shapes.EnumShape.accept(EnumShape.java:107)
at software.amazon.smithy.codegen.core.directed.CodegenDirector.generateShapesInService(CodegenDirector.java:559)
at software.amazon.smithy.codegen.core.directed.CodegenDirector.run(CodegenDirector.java:425)
at software.amazon.smithy.java.codegen.JavaCodegenPlugin.executeTypesMode(JavaCodegenPlugin.java:124)
at software.amazon.smithy.java.codegen.JavaCodegenPlugin.execute(JavaCodegenPlugin.java:69)
at software.amazon.smithy.build.SmithyBuildImpl.applyPlugin(SmithyBuildImpl.java:517)
at software.amazon.smithy.build.SmithyBuildImpl.applyProjection(SmithyBuildImpl.java:440)
at software.amazon.smithy.build.SmithyBuildImpl.executeSerialProjection(SmithyBuildImpl.java:347)
at software.amazon.smithy.build.SmithyBuildImpl.lambda$applyAllProjections$4(SmithyBuildImpl.java:201)
at software.amazon.smithy.build.SmithyBuildImpl.applyAllProjections(SmithyBuildImpl.java:212)
at software.amazon.smithy.build.SmithyBuild.build(SmithyBuild.java:167)
at software.amazon.smithy.cli.commands.BuildCommand.runWithClassLoader(BuildCommand.java:145)
at software.amazon.smithy.cli.commands.ClasspathAction.lambda$apply$0(ClasspathAction.java:52)
at software.amazon.smithy.cli.commands.ClasspathAction.runTaskWithClasspath(ClasspathAction.java:114)
at software.amazon.smithy.cli.commands.ClasspathAction.apply(ClasspathAction.java:50)
at software.amazon.smithy.cli.commands.HelpActionWrapper.apply(HelpActionWrapper.java:73)
at software.amazon.smithy.cli.commands.BuildCommand.execute(BuildCommand.java:73)
at software.amazon.smithy.cli.commands.SmithyCommand.execute(SmithyCommand.java:105)
at software.amazon.smithy.cli.Cli.run(Cli.java:70)
at software.amazon.smithy.cli.SmithyCli.run(SmithyCli.java:93)
at software.amazon.smithy.cli.SmithyCli.run(SmithyCli.java:83)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at software.amazon.smithy.gradle.SmithyUtils$RunCli.lambda$execute$0(SmithyUtils.java:165)
at software.amazon.smithy.gradle.SmithyUtils.withCacheBuster(SmithyUtils.java:222)
at software.amazon.smithy.gradle.SmithyUtils.access$100(SmithyUtils.java:42)
at software.amazon.smithy.gradle.SmithyUtils$RunCli.lambda$execute$1(SmithyUtils.java:160)
at software.amazon.smithy.gradle.SmithyUtils.withClassloader(SmithyUtils.java:200)
at software.amazon.smithy.gradle.SmithyUtils.access$000(SmithyUtils.java:42)
at software.amazon.smithy.gradle.SmithyUtils$RunCli.execute(SmithyUtils.java:159)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54)
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48)
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.lambda$execute$0(IsolatedClassloaderWorkerFactory.java:60)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.execute(IsolatedClassloaderWorkerFactory.java:52)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:191)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$500(DefaultConditionalExecutionQueue.java:112)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:168)
at org.gradle.internal.Factories$1.create(Factories.java:30)
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$runAndReleaseLocks$0(DefaultWorkerLeaseService.java:300)
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:43)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAndReleaseLocks(DefaultWorkerLeaseService.java:298)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:294)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:286)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:130)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:135)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:163)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:125)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
I observed multiple problems using the smithy-java gradle plugin (after installing it to MavenLocal, since it isn't published anywhere):
The .java file for ChecksumAlgorithm is adjacent to the java file for SharedSerde, so this appears to be an issue configuring the compiler.
In addition to that, the generated SharedSerde.java file contains duplicate methods and nested classes:
Attempting workarounds by following the instructions to apply
smithy-basedirectly I get a different error: