为依赖项指定了意外状态“DEV”。预期之一:[集成、里程碑、发布]
Posted
技术标签:
【中文标题】为依赖项指定了意外状态“DEV”。预期之一:[集成、里程碑、发布]【英文标题】:Unexpected status 'DEV' specified for dependency. Expected one of: [integration, milestone, release] 【发布时间】:2019-12-19 03:13:03 【问题描述】:我正在使用 Gradle 和旧版 ivy 存储库构建项目,其中 jar 是使用自定义 ivy 状态构建的。不幸的是,Gradle 似乎在这种状态下存在问题,因此我收到错误:
Unexpected status 'DEV' specified for *some_dependecy*:1.0.34. Expected one of: [integration, milestone, release]
这是在 build.gradle 中定义该依赖项的方式
compile 'dependency:some_dependecy:1.0.34'
和存储库定义
ivy
url 'http://local-repo/ivy-candidates-local/'
layout 'pattern' ,
artifact '[organisation]/[module]/[revision]/[type]s/[artifact].[ext]'
ivy '[organisation]/[module]/[revision]/ivys/ivy.xml'
m2compatible = true
我认为这很好,因为所有其他依赖项(没有“自定义”状态)都已正确下载
我找不到有关此类问题的任何信息。有没有办法告诉 Gradle 寻找自定义的“DEV”状态而不是默认状态?
【问题讨论】:
【参考方案1】:默认情况下,Gradle 仅将 integration
、milestone
和 release
理解为有效的工件状态。如果您想/需要为您的工件保持“DEV”状态,看起来您必须在 build.gradle 中添加一些自定义 Groovy。
https://docs.gradle.org/current/userguide/customizing_dependency_resolution_behavior.html#sec:component_metadata_rules
(来自上面的链接,不是我自己的代码:)
class CustomStatusRule implements ComponentMetadataRule
@Override
void execute(ComponentMetadataContext context)
def details = context.details
if (details.id.group == "org.sample" && details.id.name == "api")
details.statusScheme = ["bronze", "silver", "gold", "platinum"]
dependencies
config3 "org.sample:api:latest.silver"
components
all(CustomStatusRule)
【讨论】:
谢谢!不幸的是,我这样做了,现在我遇到了错误:Required org.gradle.dependency.bundling 'external' but no value provided.
Required org.gradle.jvm.version '8' but no value provided.
Found org.gradle.status 'DEV' but wasn't required. (<- so now it is not required?)
目前我正在尝试某种解决方法以上是关于为依赖项指定了意外状态“DEV”。预期之一:[集成、里程碑、发布]的主要内容,如果未能解决你的问题,请参考以下文章
无法加载文件或程序集“Elmah”或其依赖项之一。该系统找不到指定的文件
例外:无法加载文件或程序集 XXXX 或其依赖项之一。该系统找不到指定的文件
无法加载文件或程序集“Microsoft.AI.Web”或其依赖项之一。该系统找不到指定的文件
你啥时候使用“require-dev”?啥是常见的开发依赖项?