我正在尝试使用gradle并尝试设置一个系统来构建应用程序的不同风格(品牌),这些系统主要因配置而异.到目前为止我所拥有的是两个版本的构建脚本 - 两者都不起作用.
版本1添加了
第一个特定flavor-res于风味的资源文件夹sourcesets,可以覆盖一些默认资源.任务规则定义每种风味的任务,这应该(理想情况下)触发整个jar的构建.
这样可以正常工作并生成所需的罐子,一次一种口味,就像
gradle clean flavorOne
Run Code Online (Sandbox Code Playgroud)
但shadowJar如果我这样做,任务只运行一次
gradle clean flavorOne flavorTwo
Run Code Online (Sandbox Code Playgroud)
剥离脚本:
sourceSets {
main {
...
resources {
srcDirs = ['src/main/resources', "${project.buildDir}/flavor-res/"]
}
}
}
shadowJar { classifier = 'SNAPSHOT' }
tasks.addRule("Pattern: flavor<Name>") { String taskName ->
if (taskName.startsWith("flavor")) {
String flavorName = (taskName - "flavor")
String flavorOutDir = "${project.buildDir}/${flavorName}"
// Set output folder and jar name
task("${taskName}Configure") {
outputs.dir(flavorOutDir)
doFirst {
archivesBaseName = flavorName
project.buildDir = flavorOutDir
}
} …Run Code Online (Sandbox Code Playgroud) 最初的实现是基于中描述的模式
https://shashankvivek-7.medium.com/forroot-injectiontoken-in-action-angular-c2bab9959207
它一直在工作,直到我将其升级到 Angular 12。升级后,我不断收到 NullInjector 错误。无论如何都无法解决这个问题,我最终为 Angular 11 和 12 创建了两个普通的简单项目。此外,我将令牌提供程序从项目模块移至应用程序模块。
Angular 12 示例 https://drive.google.com/file/d/1lE8RL6s8L9n6zQYqVOaLqMW9ikMfMgSu/view?usp=sharing
Angular 11 示例 https://drive.google.com/file/d/1HxhCz3i5nmrK8Zj0eddTlk8zz-29lwlh/view?usp=sharing
Angular 11 版本可以工作(甚至是 prod 模式),但其他版本会遇到相同的错误。
这就是调试器内部的样子
看起来像这条线
let record = this.records.get(token);
Run Code Online (Sandbox Code Playgroud)
在 R3Injector.get 中,即使记录存在于记录列表中,也始终无法通过令牌找到记录,如图所示(索引 58)。因此,索引 78 处的重复记录被添加。密钥和令牌参数似乎是相同的。
我无法找到有关它的任何明确信息或修复它的方法。