Gru*_*eck 10 sbt playframework maven-central typesafe-stack typesafe
背景:我们公司有几个Play!应用程序,它们的测试在我们的内部CI中运行.每个Play应用程序都通过http检索各种公共存储库的依赖关系.这不是理想的(它绕过我们的内部Nexus存储库)但可以忍受.现在我们正在添加额外的CI容量,并且不希望允许新计算机能够访问防火墙外部.
在示例Play应用程序中,以下配置project/Build.scala不足以阻止构建进入repo.typesafe.com和repo1.maven.org:
sbtResolver := "Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/"
resolvers := Seq(
"Maven Central (proxy)" at "http://repo-1/nexus/content/repositories/central/",
"Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/",
// some more internal Nexus repositories
)
externalResolvers := Seq.empty
Run Code Online (Sandbox Code Playgroud)
(repo-1是我们的内部Nexus主机,代理Maven Central,Typesafe和其他存储库)
当我无论是从中央Maven的(如番石榴)或从类型安全的存储库(如播放邮件插件)中删除一些依赖,并运行play compile,我从仍被从检索到的依赖性输出看到的repo.typesafe.com和repo1.maven.org:
[info] downloading http://repo.typesafe.com/typesafe/releases/com/typesafe/play-plugins-mailer_2.9.1/2.0.2/play-plugins-mailer_2.9.1-2.0.2.jar ...
[info] [SUCCESSFUL ] com.typesafe#play-plugins-mailer_2.9.1;2.0.2!play-plugins-mailer_2.9.1.jar (981ms)
[info] downloading http://repo1.maven.org/maven2/com/google/guava/guava/12.0/guava-12.0.jar ...
[info] [SUCCESSFUL ] com.google.guava#guava;12.0!guava.jar (1422ms)
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我们还提供了一些稍微旧版本的东西:Scala 2.9.1,Play 2.0.1,sbt 0.11.3.
如何强制Play应用程序专门从内部存储库中检索依赖项?
原来答案是使用正确的sbt语法.
问题中列出的代码是为构建生成配置,但不在任何地方分配它.我相信:=替换了resolvers密钥的全局配置,但事实并非如此.
把下面的project/Build.scala强制播放应用从我们内部的Nexus解决依赖关系:
val nexusResolvers = resolvers := Seq(
"Maven Central (proxy)" at "http://repo-1/nexus/content/repositories/central/",
"Typesafe (proxy)" at "http://repo-1/nexus/content/repositories/typesafe-releases/",
// some more internal Nexus repositories
)
Run Code Online (Sandbox Code Playgroud)
请注意将结果分配给resolvers :=新的val,然后将其添加到同一文件中的项目设置中:
val main = PlayProject(...)
.settings(nexusResolvers: _*)
Run Code Online (Sandbox Code Playgroud)
而且,摆脱了中sbtResolver和externalResolvers的配置,这是没有效果的部分.