constructor()

in packages/type-safe-api/src/project/codegen/handlers/generated-java-handlers-base-project.ts [56:180]


  constructor(options: GeneratedJavaHandlersBaseProjectOptions) {
    super({
      sample: false,
      junit: false,
      compileOptions: RuntimeVersionUtils.JAVA.getMavenCompileOptions(
        options.runtimeVersion
      ),
      ...(options as any),
    });
    TypeSafeApiCommandEnvironment.ensure(this);
    this.options = options;
    this.runtimeVersion = options.runtimeVersion ?? JavaVersion.JAVA_17;
    this.packageName = `${this.pom.groupId}.${this.name}.handlers`;
    this.srcDir = path.join(
      "src",
      "main",
      "java",
      ...this.packageName.split(".")
    );
    this.tstDir = path.join(
      "src",
      "test",
      "java",
      ...this.packageName.split(".")
    );

    [
      `${options.generatedJavaTypes.pom.groupId}/${options.generatedJavaTypes.pom.artifactId}@${options.generatedJavaTypes.pom.version}`,
    ]
      .filter(
        (dep) =>
          !this.deps.tryGetDependency(dep.split("@")[0], DependencyType.RUNTIME)
      )
      .forEach((dep) => this.addDependency(dep));

    // Pin constructs version
    this.deps.removeDependency(
      "software.constructs/constructs",
      DependencyType.BUILD
    );
    this.addDependency("software.constructs/constructs@10.3.0");

    // Dependency on junit for tests
    this.deps.addDependency(
      "org.junit.jupiter/junit-jupiter-engine@5.10.2",
      DependencyType.TEST
    );

    // Remove the projen test dependency since otherwise it takes precedence, causing projen to be unavailable at synth time
    this.deps.removeDependency("io.github.cdklabs/projen", DependencyType.TEST);

    // Add a dependency on the generated java types repository
    this.pom.addRepository({
      url: `file://${path.relative(
        this.outdir,
        options.generatedJavaTypes.outdir
      )}/dist/java`,
      id: `${options.generatedJavaTypes.pom.groupId}-${options.generatedJavaTypes.pom.artifactId}-repo`,
    });

    const generateTask = this.addTask("generate");
    generateTask.exec(
      buildTypeSafeApiExecCommand(
        TypeSafeApiScript.GENERATE,
        this.buildGenerateCommandArgs()
      )
    );

    this.preCompileTask.spawn(generateTask);

    // Ignore the openapi generator metadata files
    this.gitignore.addPatterns(".openapi-generator", ".tsapi-manifest");

    // Use the maven shade plugin to build a "super jar" which we can deploy to AWS Lambda
    this.pom.addPlugin("org.apache.maven.plugins/maven-shade-plugin@3.3.0", {
      configuration: {
        createDependencyReducedPom: false,
        transformers: [
          {
            // Transformer required for merging log4j2 plugins cache file
            // https://docs.aws.amazon.com/lambda/latest/dg/java-logging.html#java-logging-cdk
            transformer: {
              "@implementation":
                "com.github.edwgiz.maven_shade_plugin.log4j2_cache_transformer.PluginsCacheFileTransformer",
            },
          },
        ],
      },
      executions: [
        {
          id: "shade-task",
          phase: "package",
          goals: ["shade"],
        },
      ],
      dependencies: [
        "com.github.edwgiz/maven-shade-plugin.log4j2-cachefile-transformer@2.15.0",
      ],
    });

    // Use the maven surefire plugin to run junit tests
    this.pom.addPlugin("org.apache.maven.plugins/maven-surefire-plugin@3.2.1");

    // Log4j2 configuration for powertools logger
    new SampleDir(this, "src/main/resources", {
      files: {
        "log4j2.xml": `<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="JsonAppender" target="SYSTEM_OUT">
            <JsonTemplateLayout eventTemplateUri="classpath:LambdaJsonLayout.json" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="JsonLogger" level="INFO" additivity="false">
            <AppenderRef ref="JsonAppender"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="JsonAppender"/>
        </Root>
    </Loggers>
</Configuration>`,
      },
    });
  }