software.amazon.jsii.JsiiException: 未找到模块“@company/cdk-tagsModule”

software.amazon.jsii.JsiiException: Module '@company/cdk-tagsModule' not found

我正在尝试使用来自 Typescript aws-cdk-library 项目的 JSII 内部生成的 java 库之一。

当我们尝试调用 cdk synth 时,我们遇到以下错误

software.amazon.jsii.JsiiException: 找不到模块“@company/cdk-tags” 错误:找不到模块“@company/cdk-tags”

目前我们使用的是 cdk 版本 1.106.0 , java 13 和 maven 3.6.

这里是我们的package.json和模块-package.json

package.json

  "name": "aws-cdk-library",
  "version": "0.0.0",
  "description": "company's AWS CDK Library.",
  "author": {
    "name": "company",
    "url": "https://www.company.com",
    "organization": true
  },
  "scripts": {
    "build": "lerna run build --stream --sort --concurrency=1",
    "clean": "lerna clean",
    "deploy": "lerna publish --no-push --no-git-tag-version --force-publish --yes",
    "eslint": "eslint . --ext=.js,.ts --format=node_modules/eslint-formatter-pretty",
    "install": "lerna bootstrap",
    "lint": "eslint . --ext .js,.ts --ignore-path=.gitignore",
    "package": "lerna run package --stream --sort --concurrency=1",
    "publish-mvn": "lerna run publish-mvn --stream --sort --concurrency=1",
    "test": "jest",
    "test:ci": "jest --ci --runInBand",
    "setVersion": "lerna version --no-push --no-git-tag-version --force-publish --yes",
    "watch": "lerna run watch --parallel"
  },
  "devDependencies": {
    "@aws-cdk/assert": "1.106.0",
    "@aws-cdk/aws-certificatemanager": "1.106.0",
    "@aws-cdk/aws-cloudfront": "1.106.0",
    "@aws-cdk/aws-cloudwatch": "1.106.0",
    "@aws-cdk/aws-cloudwatch-actions": "1.106.0",
    "@aws-cdk/aws-lambda": "1.106.0",
    "@aws-cdk/aws-route53": "1.106.0",
    "@aws-cdk/aws-route53-targets": "1.106.0",
    "@aws-cdk/aws-s3": "1.106.0",
    "@aws-cdk/aws-s3-deployment": "1.106.0",
    "@aws-cdk/aws-sns": "1.106.0",
    "@aws-cdk/aws-sns-subscriptions": "1.106.0",
    "@aws-cdk/aws-synthetics": "1.106.0",
    "@aws-cdk/core": "1.106.0",
    "@aws-solutions-constructs/aws-cloudfront-s3": "1.106.0",
    "@aws-solutions-constructs/core": "1.106.0",
    "@types/jest": "^26.0.23",
    "@types/node": "^15.0.0",
    "@typescript-eslint/eslint-plugin": "^4.22.0",
    "@typescript-eslint/parser": "^4.22.0",
    "constructs": "^3.3.75",
    "eslint": "^7.25.0",
    "eslint-config-tc": "^19.0.0",
    "eslint-config-typescript-tc": "^3.0.0",
    "eslint-formatter-pretty": "^4.0.0",
    "eslint-plugin-eslint-comments": "^3.2.0",
    "eslint-plugin-import": "^2.22.1",
    "eslint-plugin-jest": "^24.3.6",
    "eslint-plugin-prettier": "^3.4.0",
    "eslint-plugin-unicorn": "^33.0.0",
    "jest": "^26.6.3",
    "jsii": "^1.30.0",
    "jsii-pacmak": "^1.30.0",
    "jsii-release": "^0.2.9",
    "lerna": "^4.0.0",
    "prettier": "^2.2.1",
    "ts-jest": "^26.5.5",
    "ts-node": "^10.0.0",
    "typescript": "^4.2.4"
  },
  "dependencies": {
    "@company/cdk-route53-cloudfront-s3": "file:packages/route53-cloudfront-s3",
    "@company/cdk-cloudwatch": "file:packages/cloudwatch",
    "@company/cdk-nodejs-canary": "file:packages/nodejs-canary",
    "@company/cdk-pagerduty-alarm-action": "file:packages/pagerduty-alarm-action",
    "@company/cdk-tags": "file:packages/tags"
  },
  "engines": {
    "node": ">=14.0.0",
    "npm": ">=6.0.0"
  },
  "private": true,
  "license": "UNLICENSED"
}```

** module-package.json **

{
  "name": "@company/cdk-tags",
  "version": "0.0.0",
  "description": "A helper library for setting required AWS Tags.",
  "keywords": [
    "aws",
    "cdk"
  ],
  "repository": {
    "type": "git",
    "url": "git+................"
  },
  "author": {
    "name": "company",
    "url": "..........",
    "organization": true
  },
  "license": "UNLICENSED",
  "bugs": {
    "url": "..............."
  },
  "homepage": ".......................",
  "main": "lib/index.js",
  "types": "lib/index.d.ts",
  "scripts": {
    "build": "jsii",
    "watch": "jsii -w",
    "package": "jsii-pacmak",
    "publish-mvn": "jsii-release-maven"
  },
  "jsii": {
    "outdir": "dist",
    "targets": {
      "java": {
        "package": "com.company.common.aws.cdk",
        "maven": {
          "groupId": "com.company.common.aws.cdk",
          "artifactId": "tags"
        }
      }
    }
  },
  "devDependencies": {
    "@aws-cdk/assert": "1.106.0",
    "@aws-cdk/aws-sns": "1.106.0"
  },
  "peerDependencies": {
    "@aws-cdk/core": "1.106.0",
    "constructs": "^3.2.84"
  }
}

终于可以解决这个问题了。这是由于多个模块具有相同的 java 包结构名称。当从 java.

运行 时,这在加载和查找模块时产生了冲突

更改包结构后,它开始正常工作。

我们在主项目中有多个模块,例如 cloudwatch 和 nodejs-canary。

之前

package.json 用于 cloudwatch

“jsii”:{ “outdir”:“dist”, “目标”:{ “java”:{ “包”:“com.company.common.aws.cdk”, “行家”:{ "groupId": "com.company.common.aws.cdk", “artifactId”:“cloudwatch” } } } }

package.json 对于 nodejs-canary

“jsii”:{ “outdir”:“dist”, “目标”:{ “java”:{ “包”:“com.company.common.aws.cdk”, “行家”:{ "groupId": "com.company.common.aws.cdk", “artifactId”:“nodejs-金丝雀” } } } }


之后

“jsii”:{ “outdir”:“dist”, “目标”:{ “java”:{ “包”:“com.company.common.aws.cdk.cloudwatch”, “行家”:{ "groupId": "com.company.common.aws.cdk", “artifactId”:“cloudwatch” } } } }

package.json

“jsii”:{ “outdir”:“dist”, “目标”:{ “java”:{ “包”:“com.company.common.aws.cdk.nodejs_canary”, “行家”:{ "groupId": "com.company.common.aws.cdk", “artifactId”:“nodejs-金丝雀” } } } }


再补充一点,最初当我们 运行 使用一个模块时它运行良好。后来在 Java 中使用时添加了额外的模块后,我们得到了 Module not found 错误。