为什么我的play框架有时会获取oss-parent依赖?

时间:2015-02-02 10:14:34

标签: java maven sbt typesafe-activator

我有一个服务器可以自动构建一个play framework 2.3.4项目,并且可以成功构建我的开发分支。但是,当我在同一台服务器上使用相同的脚本构建不同的分支时,我得到了一些奇怪的行为。

由于某种原因,构建会获取名为[actual dependency]-parent的依赖项,这种依赖项不会发生在另一个分支上,也不会在我的本地计算机上构建有问题的分支。

例如:

在我当地:

[info] Resolving org.elasticsearch#elasticsearch;1.4.0 ...
[info] Resolving org.apache.lucene#lucene-core;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-analyzers-common;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-queries;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-memory;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-highlighter;4.10.2 ...
...

关于CI构建:

[info] Resolving org.elasticsearch#elasticsearch;1.4.0 ...
[info] Resolving org.sonatype.oss#oss-parent;7 ...
[info] Resolving org.apache.lucene#lucene-core;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-parent;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-solr-grandparent;4.10.2 ...
[info] Resolving org.apache#apache;13 ...
[info] Resolving org.apache.lucene#lucene-analyzers-common;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-parent;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-queries;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-parent;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-memory;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-parent;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-highlighter;4.10.2 ...
[info] Resolving org.apache.lucene#lucene-parent;4.10.2 ...
...

依赖项org.sonatype.oss#oss-parent;7是全新的,在工作版本中没有org.sonatype.oss依赖项。

然后在无法启动虚假应用程序之后测试失败,我认为这是因为依赖性不好。

有谁知道是什么原因引起的?

以下是我的build.sbt中的解析器:

resolvers := Seq(
  "Sonatype repo" at "https://oss.sonatype.org/content/repositories/releases/",
  "Sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
  "Maven central repo" at "https://oss.sonatype.org/content/repositories/central/",
  "Maven central repo2" at "https://repo1.maven.org/maven2/",
  "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releases/",
  Resolver.url("Objectify Play Repository", url("http://schaloner.github.io/releases/"))(Resolver.ivyStylePatterns),
  Resolver.url("Objectify Play Snapshot Repository", url("http://schaloner.github.io/snapshots/"))(Resolver.ivyStylePatterns),
  Resolver.url("Edulify Repository", url("http://edulify.github.io/modules/releases/"))(Resolver.ivyStylePatterns),
  Resolver.file("Local Repository", file(sys.env.get("PLAY_HOME").map(_ + "/repository/local").getOrElse("")))(Resolver.ivyStylePatterns),
  Resolver.mavenLocal
)

今天上午,2015年2月6日,这两个分支机构合并,因此没有任何差异。但是,一个分支仍然构建但另一个分支失败(在相同的弹性实例上)。每个构建都有自己的激活器实例,不共享存储库文件夹,但两个存储库文件夹是相同的。

1 个答案:

答案 0 :(得分:3)

根本原因可能是oss.sonatype.org repo不久前从http移到了https,因此sbt试图通过https获取该依赖关系,获得301重定向并对其进行轰炸。我怀疑你在本地看到这个的原因是你有可能的缓存版本吗?

我认为两种方法中的一种可以帮助您克服它:

  1. 如果您有权访问CI服务器的maven存储库,请尝试从本地maven存储库复制正确的依赖关系(删除当前缓存版本后,如果有)。这通常位于运行CI服务器或构建过程的任何用户的主目录中,位于〜/ .m2 / repository / org / sonatype / oss / oss-parent / 7

    我建议删除整个目录(如果有的话)并从本地已知好的副本中复制整个目录。

  2. 如果这不起作用或不可能,您可以考虑添加sonatype repo的正确https URL,在sbt中看起来像:

    resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
    

    在Build.scala的相应部分中...但您可能仍需要删除任何已损坏的缓存版本的目录(如果存在且存在于构建中)。