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 错误。
我正在尝试使用来自 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 错误。