将versionCatalogs
导出为库后,被其他应用程序使用,错误状态
> No matching variant of io.github.elye:plugin-dependencies:1.0.0 was found. The consumer was configured to find attribute 'org.gradle.category' with value 'platform', attribute 'org.gradle.usage' with value 'version-catalog' but:
- Variant 'apiElements' capability io.github.elye:plugin-dependencies:1.0.0:
- Incompatible because this component declares attribute 'org.gradle.category' with value 'library', attribute 'org.gradle.usage' with value 'java-api' and the consumer needed attribute 'org.gradle.category' with value 'platform', attribute 'org.gradle.usage' with value 'version-catalog'
- Variant 'runtimeElements' capability io.github.elye:plugin-dependencies:1.0.0:
- Incompatible because this component declares attribute 'org.gradle.category' with value 'library', attribute 'org.gradle.usage' with value 'java-runtime' and the consumer needed attribute 'org.gradle.category' with value 'platform', attribute 'org.gradle.usage' with value 'version-catalog'
我的版本目录库编写如下
plugins {
id 'java-library'
id 'kotlin'
id 'version-catalog'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
catalog {
// declare the aliases, bundles and versions in this block
versionCatalog {
alias('androidx-core').to('androidx.core:core-ktx:1.6.0')
alias('androidx-appcompat').to('androidx.appcompat:appcompat:1.3.1')
alias('androidx-constraintlayout').to('androidx.constraintlayout:constraintlayout:2.1.0')
alias('android-material').to('com.google.android.material:material:1.4.0')
bundle('androidx', ['androidx-core',
'androidx-appcompat',
'androidx-constraintlayout'])
}
}
ext {
PUBLISH_GROUP_ID = 'io.github.elye'
PUBLISH_VERSION = '1.0.0'
PUBLISH_ARTIFACT_ID = 'plugin-dependencies'
}
apply from: "./publish-module.gradle"
当我尝试访问versionCatalog库时,情况如下
dependencyResolutionManagement {
// Some other codes
versionCatalogs {
xlibs {
from("io.github.elye:plugin-dependencies:1.0.0")
}
}
}
如何修复错误?
3条答案
按热度按时间nxagd54h1#
看起来我只需要从库的
build.gradle
文件中删除以下内容。因此代码如下所示
mznpcxlj2#
我没有完全理解Elye的回答,因此我将解释我在build.gradle.kts文件中进行了哪些更改以解决该问题。
我有一个单独的项目包含了TomL版本目录,那个项目只负责将版本目录发布到我的Nexus存储库,在我的例子中,我不仅发布了TomL版本目录,而且还发布了4个属性文件,那些属性文件对应于版本,库,toml版本目录的bundle和plugin部分,这样我的运行时应用程序就可以访问包含在toml文件中的信息,通常toml版本目录只对构建组件可用。这使我能够将这些数据提供给运行时组件或外部构建的自定义gradle插件。
以下是我的settings.gradle.kts文件包含的内容:
因此,设置文件为toml文件创建了一个版本目录,我将其存储在“src/main/resoures”目录中
以下是我的build.gradle.kts文件包含的内容:
插件“version-catalog”使“components[“versionCatalog”]”可用。Maven-publish是我用来发布的插件。“com.xyz. verses.plugin”是用Kotlin编写的buildSrc插件。该插件迭代版本目录的每一部分,并生成相应的属性文件。
最后你会看到我对发布内容的定义,我展示了我如何发布toml版本目录,我展示了我如何发布versions.properties我生成的www.example.com文件,你应该注意到我在toml文件的发布描述中注解掉了“artifact”行,如果我使用“artifact”行发布文件,我会得到“no matching variant...”尝试在其他项目中使用已发布的版本目录时出现问题。如果改用“from components”行,则在其他项目中导入版本目录时不会出现“no matching variant...”问题。
gmol16393#
正如我在之前的解决方案的注解中所解释的,它实际上并不工作,我发布的代码的问题是它最终发布了一个空的版本目录;并使用一个空的已发布版本目录来避免错误。但当然,这不是你想要发生的事情。发布版本目录的解决方案是我使用“artifact”行而不是“components”行来发布版本目录。我不完全理解导致发布空版本目录的情况,但是将其作为工件而不是组件发布可以解决这个问题。很多人都发现了同样的问题,我认为这是Gradle的一个bug。
也就是说,当我尝试使用发布的版本目录时,“没有匹配的变体...”的问题就会出现。我发现我发布的版本目录重用了以前的版本号,我已经设置了我的maven存储库来允许我这样做,我所做的是运行“gradlew build --refresh-dependencies”来解决这个问题在项目中,我导入了版本目录工件。当我观察构建时,通过观察构建输出屏幕,我清楚地感觉到版本目录被重新加载。我让该任务运行了一会儿,但该任务似乎挂起了。在等待10分钟后,我只是继续并控制C 'ed退出任务,然后运行任务“gradlew build”,不使用刷新依赖项选项。它运行时没有产生“没有匹配的变量..."。我还让构建脚本打印出其中一个版本和库别名的值。它打印出包含在导入的版本目录中的值。