SBT 支持自定义常春藤模块状态吗?
SBT support for custom ivy module status?
在我的 SBT 构建中,我依赖于一个使用自定义模块状态的 ivy 工件。这会导致 SBT 出现以下错误:
[error] (*:update) sbt.ResolveException: unresolved dependency: my-org#myapp-core_2.11;1.0: java.text.ParseException: inconsistent module descriptor file found in 'http://artifacts.myorg.com/libs-snapshots-local/myapp-core_2.11/1.0/myapp-ivy.xml': bad status: 'snapshot';
我可以通过告诉 SBT 使用外部 ivy 设置来解决这个问题,如下所示:
externalIvySettings(baseDirectory(_ / "ivySettings.xml"))
然后创建一个包含以下内容的 ivySettings.xml:
<statuses default="release">
<status name="release" integration="false"/>
<status name="snapshot" integration="false"/>
</statuses>
但一定有更好的方法吧?这个解决方法的问题是现在我所有的设置(比如解析器)也必须在 ivy 文件中,因为(IFAIK)当你使用 externalIvySettings 时它要么全有要么全无。
有没有办法在我的 build.sbt 中指定一组自定义状态?或者有没有办法告诉 sbt 将外部常春藤设置与它从 build.sbt.
生成的设置结合起来
因为在 ivy 中指定自定义模块状态是有效的,所以 sbt 也应该支持它。
这是因为对于某些存储库,它们使用未通过一致性检查的非标准状态。我们通过构建不进行一致性检查的自定义解析器来解决这个问题。您还可以使用相同的方法构造具有自定义状态的解析器。以下是工作片段。
resolvers += {
val resolver = new org.apache.ivy.plugins.resolver.IBiblioResolver
resolver.setName("Custom Ivy Snapshots")
resolver.setRoot("http://Custom/snapshots/")
val settings = new org.apache.ivy.core.settings.IvySettings()
settings.setVariable("ivy.local.default.ivy.pattern", Pattern)
settings.setVariable("ivy.local.default.artifact.pattern", Pattern)
resolver.setSettings(settings)
resolver.setM2compatible(true)
resolver.setCheckconsistency(false)
new RawRepository(resolver)
}
在我的 SBT 构建中,我依赖于一个使用自定义模块状态的 ivy 工件。这会导致 SBT 出现以下错误:
[error] (*:update) sbt.ResolveException: unresolved dependency: my-org#myapp-core_2.11;1.0: java.text.ParseException: inconsistent module descriptor file found in 'http://artifacts.myorg.com/libs-snapshots-local/myapp-core_2.11/1.0/myapp-ivy.xml': bad status: 'snapshot';
我可以通过告诉 SBT 使用外部 ivy 设置来解决这个问题,如下所示:
externalIvySettings(baseDirectory(_ / "ivySettings.xml"))
然后创建一个包含以下内容的 ivySettings.xml:
<statuses default="release">
<status name="release" integration="false"/>
<status name="snapshot" integration="false"/>
</statuses>
但一定有更好的方法吧?这个解决方法的问题是现在我所有的设置(比如解析器)也必须在 ivy 文件中,因为(IFAIK)当你使用 externalIvySettings 时它要么全有要么全无。
有没有办法在我的 build.sbt 中指定一组自定义状态?或者有没有办法告诉 sbt 将外部常春藤设置与它从 build.sbt.
生成的设置结合起来因为在 ivy 中指定自定义模块状态是有效的,所以 sbt 也应该支持它。
这是因为对于某些存储库,它们使用未通过一致性检查的非标准状态。我们通过构建不进行一致性检查的自定义解析器来解决这个问题。您还可以使用相同的方法构造具有自定义状态的解析器。以下是工作片段。
resolvers += {
val resolver = new org.apache.ivy.plugins.resolver.IBiblioResolver
resolver.setName("Custom Ivy Snapshots")
resolver.setRoot("http://Custom/snapshots/")
val settings = new org.apache.ivy.core.settings.IvySettings()
settings.setVariable("ivy.local.default.ivy.pattern", Pattern)
settings.setVariable("ivy.local.default.artifact.pattern", Pattern)
resolver.setSettings(settings)
resolver.setM2compatible(true)
resolver.setCheckconsistency(false)
new RawRepository(resolver)
}